首页 文章

通过JMeter对AJAX调用进行性能测试

提问于
浏览
4

我正在为具有AJAX调用的应用程序进行性能测试 . 我能够记录相同的请求但无法执行它们 . 有人可以帮我执行AJAX请求吗?

我需要为此使用任何额外的插件吗?如果是的话,它们是什么以及如何使用它们 .

2 回答

  • 8

    我不知道任何能够处理AJAX调用的现有插件 . 技术上,AJAX请求是基本的HTTP请求,但它们需要使用每个调用一个额外的线程并行执行 .

    目前在JMeter中不可能有嵌套的线程组,所以你必须使用JSR223 Sampler做一些额外的编码来启动AJAX请求 . 主要请求和嵌套的AJAX调用应放在Transaction Controller下,看起来像真实的浏览器行为 .

    或者,您可以开发自己的JMeter Sampler,它可以生成额外的线程来模拟AJAX请求 .

    有关上述2种方法的详细信息,请参阅How to Load Test AJAX/XHR Enabled Sites With JMeter指南 .

  • 1

    虽然它看起来有点休眠,但我建造了这个采样器,它对我来说很好 . 它创建了一个可以添加多个请求的单个采样器,并且它们都是并行触发的 . Cookie / Headers 管理器/变量可用于请求:

    https://github.com/blackboard/jmeter-common/tree/master/src/main/java/blackboard/jmeter/sampler/ConcurrentHttpRequests

    附:我在ConcurrentHttpRequestsSampler.java中的processResult方法中添加了一行,将响应体写入前缀为子样本名称的jmeter变量,因为来自子请求的响应体不可用于ConcurrentHttpRequests采样器上的后处理器:

    try{
        jmeterContextOfParentThread.getVariables().put(subResult.getSampleLabel()+"_responseBody",new String(subResult.getResponseData(),"UTF-8"));
      }
      catch(java.io.UnsupportedEncodingException e) {
        jmeterContextOfParentThread.getVariables().put(subResult.getSampleLabel()+"_responseBody","Unable to read response data");
      }
    

相关问题