Performance Testing of AJAX calls via JMeter

2019-01-24 18:12发布

问题:

I am doing performance testing for an application that has AJAX calls. I am able to record the same requests but unable to execute them. Can anyone help me in execute the AJAX requests, please?

Do I need to use any extra plugin for this? If yes, what are they and how to I use them.

回答1:

I'm not aware of any existing plugins which are capable of handling AJAX calls. Technically AJAX requests are basic HTTP Requests but they need to be executed in parallel using one extra thread per call.

For the moment it is not possible to have nested thread groups in JMeter so you'll have to do some extra coding using JSR223 Sampler to kick off AJAX requests. Main request and nested AJAX calls should be placed under Transaction Controller to look like a real-browser behavior.

Alternatively you can develop your own JMeter Sampler which will be able to spawn extra threads to simulate AJAX requests.

For details on 2 approaches above see How to Load Test AJAX/XHR Enabled Sites With JMeter guide.



回答2:

Although it looks a bit dormant, I built this sampler and it is working fine for me. It creates a single sampler that you can add multiple requests to and they are all fired in parallel. Cookie/header managers/variables are available to the requests:

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

p.s. I added a line to the processResult method in ConcurrentHttpRequestsSampler.java to write the response body to a jmeter variable prefixed with the sub-sample name, as the response bodies from the sub requests aren't available to post-processors on the ConcurrentHttpRequests sampler:

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");
  }