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

时间:2014-09-03 09:40:57

标签: ajax jmeter load-testing performance-testing jmeter-plugins

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

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

P.S。我在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");
  }

答案 2 :(得分:0)

这对我们有用-我们只是将多个HTTP Request采样器直接放在其下:

https://github.com/Blazemeter/jmeter-bzm-plugins/blob/master/parallel/Parallel.md

通过链接:

enter image description here

图片注释:

  

此控制器的所有直接子元素将并行执行。