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

Jmeter - How to load test ajax web applications by multiple users with cache

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

下面是我的测试计划,

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

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

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

请问还有其他方法可以解决这个问题吗? 我想使用缓存获取指标,因此请向我推荐任何必须包含缓存的解决方案。 或者是否有任何其他类似于 jmeter 的工具可以解决此问题。我的目标是为 'n' 数量的用户占用网页加载时间和缓存。

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

提前致谢。

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

  1. 您不应该像记录它们一样记录对嵌入式资源(图像、脚本、样式、字体等)的调用 - 它们将 顺序执行 而真正的浏览器并行执行此操作。因此,删除记录的嵌入式资源请求和 "tell" JMeter 以使用 HTTP Request Defaults
  2. 下载它们(并并行执行)
  3. 你应该记录 AJAX 请求,但是真正的浏览器并行执行它们,而 JMeter 顺序运行它们。为了使 JMeter 的行为更接近真实浏览器,您需要将这些 AJAX 调用放在 Parallel Controller

您可以安装 Parallel Controller extension using JMeter Plugins Manager