【发布时间】:2014-10-27 18:15:37
【问题描述】:
我正在对具有 AJAX 调用的应用程序进行性能测试。我能够记录相同的请求但无法执行它们。谁能帮我执行 AJAX 请求?
我需要为此使用任何额外的插件吗?如果是,它们是什么以及如何使用它们。
【问题讨论】:
标签: ajax jmeter load-testing performance-testing jmeter-plugins
我正在对具有 AJAX 调用的应用程序进行性能测试。我能够记录相同的请求但无法执行它们。谁能帮我执行 AJAX 请求?
我需要为此使用任何额外的插件吗?如果是,它们是什么以及如何使用它们。
【问题讨论】:
标签: ajax jmeter load-testing performance-testing jmeter-plugins
这个对我们有用 - 我们只是将多个 HTTP Request 采样器直接放在它下面:
https://github.com/Blazemeter/jmeter-bzm-plugins/blob/master/parallel/Parallel.md
来自链接:
图片注释:
此控制器的所有直接子元素都将并行执行。
【讨论】:
虽然它看起来有点休眠,但我构建了这个采样器,它对我来说运行良好。它创建了一个采样器,您可以向其中添加多个请求,并且它们都是并行触发的。 Cookie/标头管理器/变量可用于请求:
附言我在 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");
}
【讨论】:
我不知道任何能够处理 AJAX 调用的现有插件。从技术上讲,AJAX 请求是基本的 HTTP 请求,但它们需要在每次调用时使用一个额外的线程并行执行。
目前在 JMeter 中不可能有嵌套线程组,因此您必须使用 JSR223 Sampler 进行一些额外的编码来启动 AJAX 请求。主请求和嵌套 AJAX 调用应放在Transaction Controller 下,以看起来像真正的浏览器行为。
或者,您可以开发自己的 JMeter 采样器,它能够产生额外的线程来模拟 AJAX 请求。
有关上述两种方法的详细信息,请参阅How to Load Test AJAX/XHR Enabled Sites With JMeter 指南。
【讨论】: