如何使用 Selenium 进行模拟重负载的压力测试

     2023-03-24     10

关键词:

【中文标题】如何使用 Selenium 进行模拟重负载的压力测试【英文标题】:How to stress test simulating heavy load using Selenium 【发布时间】:2012-04-10 05:03:57 【问题描述】:

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

我只需要通过浏览器对其进行测试(而其他所有方法都行不通)的原因是同时对视频流服务器和广告服务器进行压力测试并实时显示广告。

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

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

对 Selenium 有什么建议吗?

【问题讨论】:

如果您需要模拟负载,您可以使用名为 pylot (pylot.org) 的开源工具,该工具可以模拟并发连接,您可以提供用 XML 编写的测试场景(阅读入门在网站上)。该工具未使用真正的浏览器。 【参考方案1】:

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

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

【讨论】:

10000 是一个假设的数字,对于当前的服务器配置,即使 1000-5000 也可以。 Jmeter 在我的情况下没有用,因为我有一个富媒体应用程序需要执行一分钟才能使测试成功。 3.2MB 或 32MB 的 ram,我怀疑 firefox 在这两者上同样会窒息。可以说,如果您希望向服务器抛出 1000 个线程,那么您正在测试服务器,那么谁在乎客户端在做什么呢?客户端是使用媒体并使用媒体执行某些操作的成熟的 firefox,还是只是 curl 或 wget 以与富媒体应用程序相同的时间到达适当的 URL,这对服务器来说应该是无关紧要的,不是吗? 测试更多地与富媒体应用程序在压力下的行为方式有关,而不仅仅是服务器在负载下。我正在尝试在这里测试可能最近的现实世界用户场景。 curl 请求不会执行富媒体客户端应用程序,因此它不会是对整个应用程序的真正测试。 如果您正在寻找测试客户端应用程序,那么创建一个严重不足的虚拟机并在其上启动一些实例呢?您仍然可以使用 jmeter 脚本访问服务器以将负载加载到那里,然后您可以在弱 vm 上运行您的 selenium 脚本。【参考方案2】:

Selenium 并未真正针对负载/压力测试进行优化,尤其是当您在本地运行浏览器时。运行 1000 多个浏览器甚至会扼杀最强大的服务器。尽管 RAM 是一个明显的瓶颈,但 CPU 资源和带宽也有限。如果您正在加载视频,则后者是主要问题。

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

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

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

免责声明:我在这两家公司的经历都是作为付费客户,我从未为这两家公司工作过。

【讨论】:

【参考方案3】:

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

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

【讨论】:

我能够使用 selenium 运行 500 多个 firefox 实例,但问题是其中一半不会加载记录的测试脚本,它们只是显示空白浏览器。如果没有真正的浏览器,则无法进行此测试,我将更新我的原始帖子,并提供有关测试场景的更多详细信息。 Sumit,如果您必须使用活动浏览器窗口运行测试,那么您现在有以下选项: Sumit,如果您必须使用活动的浏览器窗口运行测试,并且您已经投入了大量时间和金钱来编写 selenium 脚本,那么我建议以下选项:1)在 Amazon EC2 上使用多个实例。您可以在 EC2 实例上设置 Selenium Grid。详情请访问:selenium-grid.seleniumhq.org/…。 2)如果由于数据安全或任何其他原因您不能使用云,那么您可以在实验室使用多台测试机设置 selenium 网格。就我个人而言,我更喜欢使用 EC2 作为其快速、简单且便宜的选择。 嘿 Sandip,我这样做没有问题,但现在我什至无法使用我的怪物测试服务器中 30% 的内存和 CPU。如果我在那里超过 80%,我会考虑水平缩放。问题不在于向外扩展,而在于效率启动 1000 个 Firefox 实例并让它们完成由 selenium 脚本驱动的自动化工作。 Sumit,在启动浏览器窗口时,您是否有适当的启动时间。我们在 2 个浏览器窗口启动之间有大约 10 毫秒的睡眠时间。我们已经看到,设置适当的睡眠时间增加了浏览器实例数量的容量。在您的情况下,10 ms 秒可能无法正常工作,但您可以从该数字开始。我知道这会使您的测试数据需求复杂化,因为现在您必须让每个用户多次运行其测试场景,以实现所有用户都启动并运行的最终场景。我们必须为同一个测试脚本设置多个测试数据。【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:

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

This 帖子有一个不错的列表,列出了您可能会考虑的其他无头和可自动化网络浏览器。

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

【讨论】:

【参考方案6】:

使用 selenium 的内部方法是使用 browsermob proxy 和多个浏览器代理来重新创建不同用户的体验,更改 ip 更加困难,因为它需要更改您的家庭网络。

Here is a good example

【讨论】:

压测工具jmeter介绍及使用

...返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。Apachejmeter可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服... 查看详情

postman使用

... Postman就是模拟客户端调用的常用工具。 1.2.postman如何进行压力测试?当你需要验证你的接口的抗压能力的时候,可以点击Runner,进行压力测试。 2.接口压力测试相关概念2.1.什么是压力测试?对项目中的一个HTTP接口... 查看详情

白帽***与网络安全工程师教你:如何进行ddos***与网站压力测试实战?

课前声明:1、本分享仅做学习交流,请自觉遵守法律法规!2、搜索:Kali与编程,学习更多网络***干货!3、Kali与编程每天准时更新,敬请学习和关注!正文部分一、背景介绍压力测试(StressTest),也称为强度测试、负载测试。... 查看详情

白帽***与网络安全工程师教你:如何进行ddos***与网站压力测试实战?

课前声明:1、本分享仅做学习交流,请自觉遵守法律法规!2、搜索:Kali与编程,学习更多网络***干货!3、Kali与编程每天准时更新,敬请学习和关注!正文部分一、背景介绍压力测试(StressTest),也称为强度测试、负载测试。... 查看详情

作为dba,你不得不掌握的压测工具

...试数据。此过程由单线程完成。下面举几个例子来说明下如何使 查看详情

selenium初次接触-1

...服务端进行交互),模拟用户操作(功能测试,取代人)selenium是自动化浏览器的工具包,可以用于各个方面:web测试自动化,日常的web操作是web应用的源头(浏览器)驱动应用使用非常广泛:主流浏览器厂商的支持控制成本、... 查看详情

如何使用 Selenium Webdriver 模拟特定用户?

】如何使用SeleniumWebdriver模拟特定用户?【英文标题】:HowtoimpersonateaspecificuserwithSeleniumWebdriver?【发布时间】:2013-05-1614:29:47【问题描述】:我试图在我的Selenium测试中以不同的用户身份运行IE。知道如何告诉SeleniumWebdriver“以”... 查看详情

如何对tomcat服务进行压力测试

...shservlet等Web容器,它们都是用AJP协议。这篇文章将会讲解如何来进行测试。AJP是一个致力于从web服务器路由请求到应用服务器的二进制通信协议。在web服务器和应用服务器之间通信,AJP协议比HTTP协议更加高效,因为它是使用了... 查看详情

jmeter简单压力测试

一、使用Jmeter进行简单压力测试1.压测指标  1)压测时间:一般的压测时间是10-15分钟  2)TPS:服务端每秒处理的请求数,越大越好  3)响应时间:  4)CPU、I/O、内存、网络等2.压力测试  1)线程组    2)开发... 查看详情

monkey测试

什么是monky?monkey是一个命令行工具,使用安卓调试桥来运行它,模拟用户触摸屏幕、滑动Trackball、按键等随机事件来对设备上的程序进行压力测试,检测程序多久的时间会发生异常,可以根据获取的log信息进行修复。Monkey的一... 查看详情

有赞全链路压测实战

...的整体设计:大流量下发器:其实就是模拟海量的用户去使用我们的系统,提供压测的流量,产生大促时的场景和流量;数据工厂:构造压测链路中用户请求的数据,以及压测铺底的数据、数据清洗、脱敏等工作;压测平台负责... 查看详情

springboot+nettyjt808网关压力测试

参考技术A上一篇文章我们介绍了如何使用SpringBoot+Netty开发JT808网关,这一篇文章将压力测试JT808网关。网上看过一些百万级部标网关的文章,没有给出服务器配置,没有给出发送速率,没有给出测试报告,完全就是噱头,我们要... 查看详情

如何减轻软件开发的回测压力?facebook已经用上了机器学习

如何减轻软件开发的回测压力,从而提高工程师的生产效率?MATEUSZMACHALICA、ALEXSAMYLKIN等人组成的Facebook研究团队提出使用一个利用机器学习的新系统来创建一个为特定代码更改选择回归测试的概率模型,从而更好地执行这种回归... 查看详情

elasticsearch压力测试

...ks.elastic.co/,你可以将你自己的结果与它进行对比,官方是使用2台服务器进行压测,一台运行rally,一台运行es,服务器的配置如下:rally是汽车拉力赛的意思,所以关于它里面术语也是跟汽车的拉力赛有关。如下实例,使用pmc样本数... 查看详情

pythonappium自动化测试monkey搭建+操作

...流,如点击、触摸、手势,以及一些系统级事件。你可以使用Monkey以随机但可重复的方式对正在开发的应用程序进行压力测试。官方文档:http://www.android-doc.com/tools/help/monkey.html安装AndroidSDK并配置环境变量。Monkey主要用于Android的... 查看详情

111

...实现全链路跟踪的原理和实现常用的链路压测方案中间件如何来进行实现SpringBootstarter如何编写1.全链路压测的意义上图是2012年淘宝核心业务应用关系的拓扑图,还不包含了其他的非核心业务应用,所谓的核心业务就是和交易相... 查看详情

adt使用和问题总结

文章目录1、AndroidManifest.xml在哪里2、NOX夜神安卓模拟器如何进行横竖屏切换3、开发连接夜神模拟器方法(亲测有效!)4、持续更新中!1、AndroidManifest.xml在哪里第一步:第二步:2、NOX夜神安卓模拟器如何... 查看详情

selenium模拟多种键盘操作

...可以做其他功能性操作.这次主要为大家详细介绍了pythonselenium键盘操作,教大家如何玩转selenium键盘操作,感兴趣的小伙伴们可以参考一下首先selenium对键盘上各个按键进行了分类:A:修饰键,不单独使用,通常搭配普通键,sele... 查看详情