在Web应用程序上执行压力测试?

在过去,我使用Microsoft Web应用程序压力工具和Pylot来强调测试Web应用程序。 我写了一个简单的主页,登录脚本和站点漫游(在电子商务网站中添加了一些项目到购物车和结帐)。

只需少量开发人员就能轻松打开主页,几乎总会找到一个主要问题。 第二阶段将出现更多的可扩展性问题,甚至更多 - 在发布之后。

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

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

你做了什么,你使用了哪些工具,以及你的方法取得了哪些成功? 我最感兴趣的部分是提出一些有意义的公式,用于计算应用程序可以从压力测试应用程序报告的数字支持的并发用户数。


这是JMeter的另一个投票。

JMeter是一个开源的负载测试工具,用Java编写。 它能够测试许多不同的服务器类型(例如,Web,Web服务,数据库,基本上任何使用请求的东西)。

然而,一旦你开始进行复杂的测试,它的确有一个陡峭的学习曲线,但它非常值得。 你可以很快起床并且运行,并且根据你想要做什么样的压力测试,这可能是好的。

优点:

  • Apache项目中的开源/免费工具(帮助购买)
  • 一旦掌握了核心概念,便于开始使用,并且易于使用。 (即,如何创建请求,如何创建一个断言,如何使用变量等)。
  • 非常可扩展。 我已经在服务器上运行了11台机器的测试,测试速度接近每百万次点击/小时。 设置比我预期的要容易得多。
  • 有一个积极的社区和良好的资源来帮助你起床和跑步。 先阅读教程并使用它一段时间。
  • 缺点:

  • 用户界面用Swing编写。 (啊!)
  • JMeter通过解析服务器返回的响应文本来工作。 所以如果你想要验证任何类型的javascript行为,那你的运气不好。
  • 对于非程序员来说,学习曲线非常陡峭。 如果你熟悉正则表达式,你已经领先于游戏。
  • 在支持论坛中有大量的(插入咒骂)白痴提出了愚蠢的问题,如果他们给予文档即使是粗略的一瞥,也可以轻松解决。 ('我如何使用JMeter来压力测试我的Windows图形界面'显示频率很高)。
  • “开箱即用”报告很不理想,特别是对于大型测试。 在上面提到的测试中,我最终不得不编写一个快速控制台应用程序来执行一些'xml-logfile'到'html'的转换。 这是几年前,所以很可能不再需要。

  • 我用过磨床。 它是开源的,使用起来非常简单,而且非常易于配置。 它基于Java,并使用Jython作为脚本。 我们针对一个.NET Web应用程序运行它,所以不要认为它是一个仅限于Java的工具(就其性质而言,任何Web压力工具都不应与其使用的平台绑定)。

    我们做了一些整洁的东西......我们是一个基于网络的电信应用程序,所以我设置的一个很酷的用途是模仿通过我们的Web应用程序拨号,然后使用我们有的自动应答工具(这基本上是一个教程从Microsoft连接到他们的RTC LCS服务器的应用程序......这是Microsoft Office Communicator在本地网络上连接的...然后修改为自动接电话)。 这就允许我们使用它来代替名为The Hammer的昂贵的电话工具(或类似的东西)。

    无论如何,我们还使用该工具来了解我们的应用程序在高负载情况下如何维持,并且非常有效地发现瓶颈。 该工具内置了报告功能以显示请求的时间长度,但我们从未使用过。 日志还可以存储所有的响应以及不需要的或自定义的日志记录。

    我强烈推荐这个工具,对于价格非常有用......但是期望用它做一些自定义设置(它有一个内置的代理来记录脚本,但它可能需要定制来捕获类似会话的内容......我知道我必须定制它以利用每个线程的独特会话)。


    晚会有点迟。 我同意Pylot是那里最好的新兴开源工具。 使用起来很简单,并且由一个伟大的人(Corey Goldberg)积极地开展工作。 作为OpenQA的创始人,我很高兴Pylot现在已经在我们的主页上列出并使用了我们的一些基础设施(即论坛)。

    然而,我最近还决定,负载测试的整个概念是有缺陷的:模拟HTTP流量,应用程序像它们变得复杂一样,是一个令人头疼的问题。 这就是我创建商业工具BrowserMob的原因。 这是一个外部负载测试服务,使用Selenium在回放负载时控制真实的Web浏览器。

    这种方法显然需要比正常负荷的测试技术一多的硬件,但硬件实际上是相当便宜的,当你正在使用云计算。 而这一个很好的副作用是脚本比正常负荷试验容易得多 。 您不必进行任何高级正则表达式匹配(如JMeter要求)来提取cookie,.NET会话状态,Ajax请求参数等。由于您使用的是真正的浏览器,因此他们只是做他们应该做的事情。

    很抱歉公然地宣传商业产品,但希望这个概念对于一些人来说很有意思,并且至少让他们考虑一些新的方法来处理负载测试,当你能够访问一堆额外的硬件时!

    链接地址: http://www.djcxy.com/p/52529.html

    上一篇: Performing a Stress Test on Web Application?

    下一篇: Has Node.js Abstarcted that multithreading?