如何使用硒进行压力测试模拟重载

时间:2012-03-26 17:00:13

标签: selenium automated-tests stress-testing browser-automation

我有一个测试系统,这是一种视频广告发布技术。我需要像1-2分钟一样加载每个视频来投放广告。这些视频在Flash客户端中播放,并像在YouTube中一样以FLV流形式流式传输。

我之所以需要仅通过浏览器进行测试 - 而其他所有方法都无法正常工作 - 是为了同时对视频流服务器和广告服务器进行压力测试并实时显示广告。

我使用过Selenium,W​​atiN,Automation Anywhere和许多其他自动化工具。但是,当我尝试在我的机器上启动10000个浏览器(32GB RAM,16核CPU)时,它们都无法完成这项工作。

使用Selenium,到目前为止,我能够启动最大的FireFox实例,但这仍然太低:一半的实例没有运行测试。

有关Selenium的任何建议吗?

5 个答案:

答案 0 :(得分:4)

您不会在您的计算机上运行10,000个浏览器。这将为每个浏览器实例提供3.2MB的物理内存,我很确定FireFox不会那样。

您可以创建一个JMeter脚本,该脚本使用许多线程命中您的服务器。它不会与UI交互,但会模拟许多客户端的负载,这些客户端会点击您告诉它的任何URL。我相信它还包括录制会话和播放会话的功能,以便轻松设置会话。

答案 1 :(得分:4)

Selenium并未真正针对负载/压力测试进行优化,尤其是当您在本地运行浏览器时。运行1000多个浏览器即使是最强大的服务器也会窒息。虽然RAM是一个明显的瓶颈,但您的CPU资源和带宽也有限。如果您要加载视频,后者是主要关注点。

更不用说您将使用10k浏览器从单个IP进行测试,因此负载平衡可能无法正常运行,以及视频广告实际分发给特定虚拟用户。

如果您想坚持现有的Selenium测试,我已经有了BrowserMob的良好体验。他们基本上有一个巨大的网格来进行真正的浏览器负载测试,分布在AWS上。

另一项建议是实际的性能测试工具。我推荐Soasta CloudTest。他们有一个免费版本,可以运行100个用户,因此您可以看到它是否适合您。我发现CloudTest的脚本编写相对简单。

免责声明:我与两家公司的经历一直是付费客户,我从来没有工作过。

答案 2 :(得分:1)

如果您使用的是Windows计算机,那么根据我的经验,要打开的浏览器窗口实例数量有限制。根据我上次的测试,它确实限制在100-150个浏览器窗口之间。

我建议你使用无头机器人,不需要打开浏览器窗口。我认为Selenium的最新版本具有这种能力。但是,当您尝试模拟10,000多个用户实例时,它似乎更像是负载测试,我建议您使用负载测试工具,如JMeter或LoadRunner。

答案 3 :(得分:1)

在我看来,您正在尝试根据高流量来验证客户端会看到什么,不是吗?

在这种情况下,乔尔非常正确。如果您绝对必须查看客户端看到的内容,您可以使用线程匹配并将结果转储到数据库中。无论如何,这将向您显示客户端会看到的任何内容,并且比数千个浏览器实例更容易排序。

无论哪种方式,如果服务器端没有错误,您的客户端将不会看到错误。如果您在带宽受限环境,CPU密集型环境或内存密集型环境中测试功能,那么比运行数千个浏览器实例更容易实现。

答案 4 :(得分:0)

你的帖子给我带来了某种形式的基于广告的欺诈行为,但无论哪种方式:你是否考虑过使用除Firefox以外的其他网络浏览器? PhantomJS是一个基于webkit的无头浏览器,与Selenium兼容。它支持所有核心浏览器功能,如DOM处理,CSS选择器,Javascript和Canvas。我不知道它是否支持Flash。

This帖子有一个很好的列表,你可以考虑其他无头和可自动化的网络浏览器。

此外,如果每个浏览器实例都在实例化Flash插件,请不要忽视Flash可能出现问题的可能性,而不是Firefox。或者,为什么要实例化几个不同的Firefox进程?你可以通过使用标签来完成你想要的吗?