在过去,我使用微软Web应用程序压力测试工具和Pylot对Web应用程序进行压力测试。我写了一个简单的主页、登录脚本和站点演练(在一个电子商务网站中添加一些商品到购物车和结帐)。
只要让少数开发人员在主页上使劲敲一下,就几乎总能找到一个主要问题。更多的可伸缩性问题将在第二阶段浮出水面,甚至更多——在发布之后。
我使用的工具的URL是Microsoft Homer(又名Microsoft Web Application Stress Tool)和Pylot。
这些工具生成的报告对我来说没有多大意义,我花了很多时间试图弄清楚站点能够支持什么样的并发负载。这总是值得的,因为最愚蠢的错误和瓶颈总是会出现(例如,web服务器配置错误)。
你做了什么,你使用了什么工具,你的方法有什么成功?对我来说,最有趣的部分是提出某种有意义的公式,用于从压力测试应用程序报告的数字中计算应用程序可以支持的并发用户数。
Visual Studio测试版2010(2008年也不错)。这是一个非常简单和强大的工具来创建web/负载测试。
在Windows服务器上使用此工具的好处是,您可以在报告中集成访问所有perfmon服务器统计信息。真的有用。
另一个好处是,在Visual Studio项目中,你可以集成一个“性能会话”来分析你网站的代码执行情况。
如果你在windows服务器上提供网页服务,这是最好的工具。
然而,使用多台机器来加载测试应用程序需要一个单独且昂贵的许可证。
来这个派对有点晚了。我同意Pylot是目前最好的开源工具。它使用简单,是由一个伟大的人(科里·戈德堡)积极工作。作为OpenQA的创始人,我也很高兴Pylot现在被列在了我们的主页上,并使用了我们的一些基础设施(即论坛)。
然而,我最近也认为负载测试的整个概念是有缺陷的:在应用程序变得如此复杂的情况下,模拟HTTP流量是一件令人痛苦的事情。这就是我创建商业工具BrowserMob的原因。它是一个外部负载测试服务,在回放负载时使用Selenium来控制真实的web浏览器。
与正常的负载测试技术相比,这种方法显然需要更多的硬件,但在使用云计算时,硬件实际上相当便宜。这样做的一个很好的副作用是编写脚本比普通的负载测试容易得多。你不需要做任何高级的正则表达式匹配(就像JMeter要求的那样)来提取cookie、. net会话状态、Ajax请求参数等等。因为您使用的是真正的浏览器,所以它们只是做它们应该做的事情。
很抱歉公然推销一个商业产品,但希望这个概念对一些人来说是有趣的,至少让他们考虑一些新的方法来处理负载测试,当您有一堆额外的硬件时!
既然这个问题还没有解决,我不妨发表一下看法。
好消息是,在过去的5年左右的时间里,开源工具已经真正成熟并在这个领域起飞了,坏消息是还有很多这样的工具。
以下是我的想法:-
Jmeter vs Grinder
Jmeter是由XML样式规范驱动的,该规范是通过GUI构造的。
Grinder在多线程Java框架中使用Jython脚本,因此更面向程序员。
这两个工具都可以处理HTTP和HTTPS,并有一个代理记录器让您开始。
这两种工具都使用Controller模型来驱动多个测试代理,因此可伸缩性不是问题(给定对云的访问)。
哪个更好:-
这是一个艰难的呼叫,因为使用这两种工具的学习曲线是陡峭的,因为您进入了更复杂的脚本需求,如url重写、相关性、为每个虚拟用户提供唯一数据以及模拟第一次或返回用户(通过操作HTTP头)。
也就是说,我会从Jmeter开始,因为这个工具有很多追随者,网上有很多使用这个工具的例子和教程。如果和当你遇到一个“路障”,这是你不能“轻易”用Jmeter做的事情,然后看看Grinder。好消息是,这两个工具都有相同的Java需求,“混合搭配”解决方案也不是不可能。
添加了一些新的东西——运行多个Selenium WebDriver实例的无头浏览器。
这是一种相对较新的方法,因为它依赖于现在可以从云中提供的资源的可用性。使用这种方法,一个Selenium (WebDriver)脚本在多线程的无头浏览器(即WebDriver = New HtmlUnitDriver())驱动程序中运行。
根据经验,亚马逊M1小实例可以执行大约25个“无头浏览器”实例。
这意味着,当您将功能测试脚本重新定位为性能测试脚本时,所有的相关性、url重写问题都将消失。
与Grinder或Jmeter等HTTP驱动程序相比,由于需要更多的虚拟机来驱动负载,因此可伸缩性受到了影响。也就是说,如果你想要驱动500个虚拟用户,那么使用20个亚马逊小实例(每个实例每小时6美分),每小时只需1.20美元,就可以获得非常接近真实用户体验的负载。
我也投票给jMeter,我想在@PeterBernier的回答中添加一些引用。
负载测试回答的主要问题是有多少并发
我的web应用程序可以支持哪些用户?为了得到正确的答案,
负载测试应该代表真实的应用程序使用情况,接近于
可能的。
请记住,jMeter有许多构建块逻辑控制器,配置元素,预处理器,监听器,…这对你有帮助。
你可以模仿真实世界的情况与jMeter,例如,你可以:
Configure jMeter to act as real Browser by configuring (concurrent resource download, browser cache, http headers, setting request time out, cookie management, https support, encoding , ajax support ,... )
Configure jMeter to generate user requests (by defining number of users per second, ramp-up time, scheduling ,...)
Configure lots of client with jMeter on them, to do a distributed load test.
Process response to find if the server is responding correctly during test. ( For example assert response to find a text in it)
请考虑:
It is easy to start a real web application test with jMeter in minutes. The jMeter has a very easy tool which record your test scenario ( know as HTTP(S) Test Script Recorder).
jMeter has lots of plugins at http://jmeter-plugins.org.
The jMeter UI is swing based and has made good changes in jMeter 3.2. On the other hand please consider that JMeter GUI should only be used for test and debugging. It is not good practice to use it in GUI mode for actual test. https://www.blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui. Configure and test your scenario and run it on non-gui mode.
The are lots of reporting showing tools in jMeter (Known as listeners) but there are not meant to be on during test. You must run your test and generate reports ( .jtl files). Then you must use these tools to analyze result. Please have a look at https://www.blazemeter.com/blog/jmeter-listeners-part-1-basic-display-formats or https://www.tutorialspoint.com/jmeter/jmeter_listeners.htm.
https://www.blazemeter.com/jmeter提供了非常有用的信息,可以帮助您配置测试环境。