Jmeter - 如何使用缓存加载多个用户的测试 ajax Web 应用程序

Posted

技术标签:

【中文标题】Jmeter - 如何使用缓存加载多个用户的测试 ajax Web 应用程序【英文标题】:Jmeter - How to load test ajax web applications by multiple users with cache 【发布时间】:2018-03-18 15:02:37 【问题描述】:

我一直在使用 Jmeter 来测试我的 Web 应用程序的性能。我已经通过排除js,css和其他静态内容文件记录了jmeter脚本。 运行脚本时,Jmeter 不执行 javascript 文件,因此不会发送 ajax XHR 请求。为了克服这个问题,我记录了带有 js、css 和其他静态内容的脚本,它也记录了所有 Ajax xhr 请求。但性能结果似乎与浏览器加载时间不同。我还需要在性能测试期间使用缓存。

下面是我的测试计划的样子,

    包含在 HTTP 请求管理器中检索所有嵌入的资源。 并发池大小为 6 我添加了 HTTP cookie 管理器和缓存管理器。 我添加了一个循环控制器(这是用于缓存的,jmeter 将在第一次迭代时缓存文件,它将使用缓存的文件 之后)

我面临的问题是休息通话所花费的时间是单用户浏览器控制台中显示的时间的两倍。我已经尝试了所有其他组合,但我总是比浏览器控制台获得更多的时间。

我尝试使用 Selenium webdriver 插件来模拟浏览器行为,但它似乎没有使用缓存。 (https://www.blazemeter.com/blog/how-load-test-ajaxxhr-enabled-sites-jmeter)

还有其他方法可以解决这个问题吗? 我想用缓存来衡量指标,所以请建议我任何必须包含缓存的解决方案。 或者是否有任何其他类似于 jmeter 的工具可以解决这个问题。我的目标是为 'n' 个用户使用缓存的网页加载时间。

PS : 我什至有兴趣在 jmeter 中编写任何脚本,但脚本不应使 jmeter 的性能超载。

提前致谢。

【问题讨论】:

【参考方案1】:
    您不应像记录它们一样记录对嵌入式资源(图像、脚本、样式、字体等)的调用 - 它们将按顺序执行,而真正的浏览器会并行执行此操作。所以删除对嵌入式资源的记录请求,并使用HTTP Request Defaults“告诉”JMeter 下载它们(并并行执行) 您应该记录 AJAX 请求,但是真正的浏览器会并行执行它们,而 JMeter 会按顺序运行它们。为了使 JMeter 的行为更接近真实浏览器,您需要将这些 AJAX 调用放在 Parallel Controller 下

您可以使用JMeter Plugins Manager 安装Parallel Controller 扩展

【讨论】:

感谢出色的并行控制器。它通过并行运行http请求来减少页面加载时间。我最后做的是通过排除js,css来记录脚本,它只记录了ajax xhr请求。然后我使用了并行控制器。【参考方案2】:

Jmeter 和缓存是不相关的——数据通过网络后发生的所有事情都超出了设计范围。您应该只模拟您不希望被缓存的请求。所以这是可行的部分:从 Jmeter 脚本中删除您希望浏览器缓存的所有请求(或将它们移到循环之外)。关于 XHR 的加载时间:浏览器肯定会使用 HTTP keepAlive。结果是除了第一个请求之外的所有请求都跳过了 TCP 套接字的设置和拆卸阶段,并且速度更快 - 特别是。当请求本身小而快时。您也可以通过检查 KeepAlive 选项 AND 选择 http commons 作为实现在 JMeter 中模拟这一点。您可以在此处的文档中阅读此内容:http://jmeter.apache.org/usermanual/component_reference.html#HTTP_Request

【讨论】:

谢谢@sebastian。我已经处理了缓存项目。我目前面临的问题是,与浏览器控制台相比,http 请求需要更多时间。几乎是两倍的时间。我不确定是什么导致了这种延迟.. 保活? (上面的c) 是的,它已配置。但是我还没有将http实现设置为Httpclient。留空。

以上是关于Jmeter - 如何使用缓存加载多个用户的测试 ajax Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Jmeter 为 100 个手机号码和电子邮件唯一的用户加载测试注册 API

jmeter多个接口测试分配并发用户数

我需要使用 jmeter 和 redline 13 加载/性能测试聊天套接字

Apache Jmeter 对网页的响应时间太长

Jmeter缓存管理器使用情况

使用 jmeter 对 300 个同时用户进行负载测试