对Web应用程序进行压力测试?

253

过去,我使用了微软Web应用程序压力测试工具和Pylot来对web应用程序进行压力测试。我编写了一个简单的首页、登录脚本和网站漫游(在电子商务网站上将几个商品添加到购物车和结算)。

只需用一些开发人员猛攻主页,就几乎总能找到一个严重问题。更多可扩展性问题将在第二阶段浮出水面,甚至在发布后还会有更多问题。

我使用的工具URL是Microsoft Homer(又称Microsoft Web应用程序压力测试工具)和Pylot

这些工具生成的报告对我来说从来没有什么意义,我会花费很多时间试图弄清楚网站能够支持多少并发负载。但这总是值得的,因为最愚蠢的错误和瓶颈总会出现(例如,Web服务器配置不当)。

你都做了些什么,用了哪些工具,并且采用了什么方法取得了成功?对我来说最有趣的部分是提出一种有意义的公式,用于根据压力测试应用程序报告的数字计算应用程序可以支持的并发用户数。

30个回答

1

1

我使用过openSTA

这允许记录一个与网站的会话,并通过相对简单的脚本语言进行回放。

您可以轻松测试 Web 服务并编写自己的脚本。

它允许您以任何您想要的方式在测试中组合脚本,并配置迭代次数、每个迭代中的用户数、引入每个新用户的逐步时间和每个迭代之间的延迟时间。测试也可以预定在未来进行。

它是开源和免费的。

它生成若干报告,可以保存到电子表格中。我们随后使用数据透视表轻松分析和绘制结果。


1
我们开发了一个过程,将负载和性能测量视为一级关注点 - 正如您所说,将其留到项目结束往往会导致失望...
因此,在开发过程中,我们包括非常基本的多用户测试(使用Selenium),检查基本的疯狂问题,例如破碎的会话管理,明显的并发问题和明显的资源争用问题。对于非平凡的项目,我们将其包含在持续集成过程中,以便获得非常定期的反馈。
对于没有极端性能要求的项目,我们在测试中包括基本的性能测试;通常,我们使用BadBoy脚本化测试,并将其导入JMeter,替换登录详细信息和其他线程特定的事物。然后,我们将这些升级到服务器每秒处理100个请求的水平;如果响应时间小于1秒,则通常足够。我们启动并继续我们的生活。
对于极高性能要求的项目,我们仍然使用BadBoy和JMeter,但会花费大量精力来了解测试环境中服务器的瓶颈(通常是Web和数据库服务器)。有一个很好的工具用于分析Microsoft事件日志,这对我们非常有帮助。我们通常会发现意外的瓶颈,如果可能的话进行优化;这样就可以得到在“1个Web服务器,1个数据库服务器”上运行速度最快的应用程序。然后,我们通常会部署到目标基础设施,并使用“云中的Jmeter”服务之一来按比例重新运行测试。
同样,PAL报告有助于分析测试期间发生的情况 - 通常在生产环境中会看到非常不同的瓶颈。
关键是确保不仅运行压力测试,还要收集所需的信息以了解应用程序的性能。

0

我曾经使用过JMeter。但是它无法测试ASP.NET Webforms。因为viewstate会破坏我的测试结果。我不确定原因,但有一些工具无法正确处理viewstate。我的当前项目是ASP.NET MVC,JMeter可以很好地与之配合。


0
我赞同使用OpenSTA。我只想补充一点,它可以让你使用SMTP监控你正在测试的服务器。我们跟踪处理器负载、内存使用情况、发送的字节数等等。唯一的缺点是,如果你发现了某些问题并想要修复它,它依赖于几个不再维护的开源库,因此获取编译版本的源代码比大多数开源软件更棘手。

0
另外需要注意的是,针对我们的Web应用程序,我发现由于线程之间对锁的争用而导致了严重的性能问题...因此,教训就是要非常仔细地考虑锁定方案。最终,我们采取了工作线程来限制过多的请求,使用异步的HTTP处理程序,并且避免应用程序被压垮、崩溃。这意味着会积累大量的积压任务,但至少网站可以保持运行。

这完全没有回答问题。 - Corey Goldberg

0

1
Test Complete 是一款商业工具。 - Ripon Al Wasim

0

我在使用FunkLoad时取得了不错的结果:

  • 易于编写用户交互脚本
  • 报告清晰明了
  • 可以监控服务器负载

0

冒着被指责为无耻自我推销的风险,我想指出,在寻找免费负载测试工具的过程中,我阅读了这篇文章:http://www.devcurry.com/2010/07/10-free-tools-to-loadstress-test-your.html

要么我无法获得所需的吞吐量,要么我无法获得所需的灵活性。而且,我希望能够在后期测试分析中轻松汇总多个负载测试生成主机的结果。

我试用了列表中的每个工具,并且令人沮丧的是发现没有一个工具完全符合我的要求。因此,我自己开发了一个并分享给大家。

这就是它:http://sourceforge.net/projects/loadmonger

PS:熟悉城市俚语的人不要对名称发表讽刺性评论。我以前不知道,但现在略微有些见识了。


0

我也投票支持 jMeter,并想在 @PeterBernier 的回答中添加一些引用。

负载测试所回答的主要问题是我的 Web 应用程序可以支持多少并发用户?为了得到正确的答案,负载测试应该尽可能地代表真实的应用程序使用情况

记住上述内容,jMeter 有许多构建块 逻辑控制器配置元素预处理器监听器 等等,这些都可以帮助你。

你可以使用 jMeter 模拟真实世界的情况,例如:

  1. 通过配置(并发资源下载浏览器缓存HTTP头设置请求超时Cookie管理HTTPS支持编码AJAX支持等),将jMeter配置为真实的浏览器。
  2. 通过定义每秒用户数逐渐增加的时间调度等,将jMeter配置为生成用户请求。
  3. 使用jMeter在许多客户端上进行配置,以进行分布式负载测试。
  4. 处理响应以查找服务器在测试期间是否正确响应(例如,使用assert来查找其中的文本)。

请注意:

https://www.blazemeter.com/jmeter提供了非常好的实用信息,可以帮助您配置测试环境。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接