我一直在开发一个在前端大量使用 AJAX 和动态 JavaScript 的网站,是时候开始压力测试了。但是你如何正确地对需要点击前端几个链接的东西进行压力测试呢?我能够轻松快速地反复访问该网站的每一页的一种方法是将 Google Mini 指向它。但这不会点击链接然后导航模态窗口和类似的东西。
编辑 - 我应该指出该站点是用 PHP5 完成的,并且使用的 JavaScript 库是 jQuery。不确定这是否会有所作为,但觉得知道这可能很有用。
我一直在开发一个在前端大量使用 AJAX 和动态 JavaScript 的网站,是时候开始压力测试了。但是你如何正确地对需要点击前端几个链接的东西进行压力测试呢?我能够轻松快速地反复访问该网站的每一页的一种方法是将 Google Mini 指向它。但这不会点击链接然后导航模态窗口和类似的东西。
编辑 - 我应该指出该站点是用 PHP5 完成的,并且使用的 JavaScript 库是 jQuery。不确定这是否会有所作为,但觉得知道这可能很有用。
JMeter在这方面做得很好。您可以记录您的会话并根据自己的喜好进行调整。
所谓的“ajax 负载测试”是这个站点上反复出现的主题,并且经常被混淆。因此,让我们直截了当地说:对普通网页进行负载测试和使用 ajax 进行负载测试之间确实没有区别。这一切都归结为离散的请求;他们只是碰巧不是整页刷新。
要记住的一件事是负载测试处理请求的服务器(负载测试)和正在更新的 UI 组件的屏幕性能(您的 javascript 执行情况如何)之间存在明显差异。
简单的负载测试示例:
有一些负载测试工具可以支持 AJAX。例如,WebLoad
你真正想要的是压力测试是服务器处理ajax请求的能力。使用加载工具在“记录”测试时查看请求,然后进行适当的调整。我只用过vs测试版,所以我不能指给你一个低成本的。
我在某种程度上不同意内森和弗雷迪。他们是正确的,“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。请参阅我最近关于是否模拟虚拟用户的博文。
希望有帮助!
你可以使用类似openSTA的东西。
这允许记录与网站的会话,然后通过相对简单的脚本语言进行回放。
您还可以轻松地测试 Web 服务并编写自己的脚本。
它允许您以任何您想要的方式将脚本放在测试中,并配置迭代次数、每次迭代中的用户数、引入每个新用户的加速时间以及每次迭代之间的延迟。将来也可以安排测试。
它是开源和免费的。
它会生成许多报告,这些报告可以保存到电子表格中。然后,我们使用数据透视表轻松分析和绘制结果。