5

我一直在开发一个在前端大量使用 AJAX 和动态 JavaScript 的网站,是时候开始压力测试了。但是你如何正确地对需要点击前端几个链接的东西进行压力测试呢?我能够轻松快速地反复访问该网站的每一页的一种方法是将 Google Mini 指向它。但这不会点击链接然后导航模态窗口和类似的东西。

编辑 - 我应该指出该站点是用 PHP5 完成的,并且使用的 JavaScript 库是 jQuery。不确定这是否会有所作为,但觉得知道这可能很有用。

4

5 回答 5

2

JMeter在这方面做得很好。您可以记录您的会话并根据自己的喜好进行调整。

所谓的“ajax 负载测试”是这个站点上反复出现的主题,并且经常被混淆。因此,让我们直截了当地说:对普通网页进行负载测试和使用 ajax 进行负载测试之间确实没有区别。这一切都归结为离散的请求;他们只是碰巧不是整页刷新。

要记住的一件事是负载测试处理请求的服务器(负载测试)和正在更新的 UI 组件的屏幕性能(您的 javascript 执行情况如何)之间存在明显差异。

简单的负载测试示例:

  1. 初始页面加载
  2. 登录
  3. 导航?
  4. 5-10 个“ajax”请求(或任何适合您的应用程序使用模式的请求)
  5. 登出
于 2009-02-19T21:31:47.383 回答
1

有一些负载测试工具可以支持 AJAX。例如,WebLoad

http://www.radview.com/solutions/ajax-load-testing.aspx

于 2009-02-19T20:51:51.723 回答
1

你真正想要的是压力测试是服务器处理ajax请求的能力。使用加载工具在“记录”测试时查看请求,然后进行适当的调整。我只用过vs测试版,所以我不能指给你一个低成本的。

于 2009-02-19T21:15:46.323 回答
1

我在某种程度上不同意内森和弗雷迪。他们是正确的,“AJAX 测试”在发出 HTTP 请求方面确实没有什么不同。但这并不是那么简单。请参阅我在 Ajaxian.com 上关于为什么负载测试 Ajax 很难的文章。

JMeter、Pylot 和 The Grinder 都是生成 HTTP 请求的好工具(我个人推荐 Pylot)。但在它们的核心,它们并不充当浏览器并处理 JavaScript,这意味着它们所做的只是重播他们在创纪录的时间内看到的流量。如果这些 AJAX 请求对于该会话是唯一的,那么它们可能不适合/不正确地进行大量重播。

事实是,随着更多逻辑被推送到浏览器中,使用传统负载测试工具正确模拟流量变得更加困难(如果不是不可能的话)。

在我的文章中,我举了一个简单的例子,说明当你想要查询 1000 个不同的搜索词(负载测试期间的一个重要目标)时,测试像 Google 主页这样的东西是多么困难。要使用 JMeter/Pylot/Grinder 执行此操作,您实际上最终会以该工具的本机语言重新编写 AJAX 代码的一部分(在您的情况下使用 jQuery)。

如果您的目标是衡量用户感知的响应时间(这可以说是一天结束时最重要的事情),它会变得更加复杂。对于使用 Comet/“Reverse Ajax”(一种长时间保持打开套接字的技术)的非常复杂的应用程序,传统的加载工具根本不起作用。

我的公司 BrowserMob 提供负载测试服务,它使用由Selenium提供支持的 Firefox 浏览器来驱动数百或数千个真实浏览器,允许您测量和计时浏览器中所见视觉元素的性能。我们还支持传统的虚拟用户(盲 HTTP 流量)和模拟浏览器(通过HtmlUnit)。

综上所述,通常将 BrowserMob 之类的服务与传统负载测试相结合是正确的方法。也就是说,真实的浏览器非常适合进行全保真负载测试,但它们永远不会像“虚拟用户”那样经济,因为它们需要 10-100 倍的 RAM 和 CPU。请参阅我最近关于是否模拟虚拟用户的博文。

希望有帮助!

于 2009-02-20T17:35:56.897 回答
0

你可以使用类似openSTA的东西。

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

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

它允许您以任何您想要的方式将脚本放在测试中,并配置迭代次数、每次迭代中的用户数、引入每个新用户的加速时间以及每次迭代之间的延迟。将来也可以安排测试。

它是开源和免费的。

它会生成许多报告,这些报告可以保存到电子表格中。然后,我们使用数据透视表轻松分析和绘制结果。

于 2009-02-26T23:35:49.387 回答