首页 文章

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

提问于
浏览
0

我一直在使用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

有没有其他方法可以解决这个问题? I want to take the metrics with cache so kindly suggest me any solution that must include cache. 或者是否有其他类似于jmeter的工具可以解决这个问题 . 我的目标是使用缓存来获取网页加载时间'n'用户数 .

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

提前致谢 .

2 回答

  • 2
    • 您不应该记录对嵌入式资源(图像,脚本,样式,字体等)的调用,就像您记录它们一样 - 它们将被执行 sequentially 而真正的浏览器并行执行此操作 . 因此,使用HTTP Request Defaults删除已记录的嵌入式资源请求和"tell" JMeter以下载它们(并行执行)

    • 您应该记录AJAX请求,但是真正的浏览器并行执行它们,而JMeter按顺序运行它们 . 为了使JMeter的行为更接近真实浏览器,您需要将这些AJAX调用放在Parallel Controller

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

    JMeter plugins manager - parallel controller

  • 1

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

相关问题