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

时间:2018-03-18 15:02:37

标签: performance selenium-webdriver jmeter performance-testing load-testing

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

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

  1. 包含检索HTTP请求管理器中的所有嵌入资源。
  2. 并发池大小为6
  3. 我添加了HTTP cookie管理器和缓存管理器。
  4. 我添加了一个循环控制器(这是用于缓存,jmeter将在第一次迭代时缓存文件,它将使用缓存的文件 之后)
  5. 我面临的问题是,休息呼叫所花费的时间是单个用户的浏览器控制台中显示的时间的两倍。我已经尝试了所有其他组合,但总是比浏览器控制台的时间更长。

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

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

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

    提前致谢。

2 个答案:

答案 0 :(得分:2)

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

    您可以使用Parallel Controller

    安装JMeter Plugins Manager扩展程序

    JMeter plugins manager - parallel controller

答案 1 :(得分:1)

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