如何在JMeter汇总报告中捕获并行请求的最大响应时间?
实现JMeter并行请求最大响应时间统计的方法
以下两种方案可满足你在汇总报告中捕获并行请求最大响应时间的需求:
方案一:变量记录+自定义采样器输出
初始化最大值变量
在Parallel Controller前添加JSR223 PreProcessor,初始化存储最大响应时间的变量:vars.put("maxResponseTime", "0")每个请求后更新最大值
给Parallel Controller内的Req1、Req2、Req3分别添加JSR223 PostProcessor,在请求完成后比较并更新最大值:def currentRespTime = prev.getResponseTime() def currentMax = vars.get("maxResponseTime") as long if (currentRespTime > currentMax) { vars.put("maxResponseTime", currentRespTime.toString()) }若需忽略失败请求,可添加成功判断:
def currentRespTime = prev.getResponseTime() def currentMax = vars.get("maxResponseTime") as long if (prev.isSuccessful() && currentRespTime > currentMax) { vars.put("maxResponseTime", currentRespTime.toString()) }生成汇总用采样器
在Parallel Controller后添加JSR223 Sampler(无需额外插件),将采样器响应时间设为记录的最大值:def maxTime = vars.get("maxResponseTime") as long SampleResult.setResponseTime(maxTime) SampleResult.setSuccessful(true) SampleResult.setSampleLabel("Parallel Requests Max Response Time") SampleResult.setResponseMessage("Max time among Req1/Req2/Req3: ${maxTime}ms")汇总报告中该采样器的响应时间即为三个并行请求的最大值。
方案二:用Transaction Controller覆盖响应时间
嵌套控制器结构
添加一个Transaction Controller,将包含Req1、Req2、Req3的Parallel Controller放入其中。覆盖Transaction响应时间
给Transaction Controller添加JSR223 PostProcessor,遍历子请求响应时间并取最大值,设置为当前Transaction的响应时间:long maxRespTime = 0 prev.getSubResults().each { subSample -> // 可选:仅统计成功请求的响应时间 if (subSample.isSuccessful() && subSample.getResponseTime() > maxRespTime) { maxRespTime = subSample.getResponseTime() } } prev.setResponseTime(maxRespTime)汇总报告中直接查看该Transaction Controller的响应时间,即为并行请求的最大值。
注意事项
- 所有JSR223元件请选择Groovy语言,性能优于其他脚本语言;
- 若需统计包含断言失败的请求,可移除
subSample.isSuccessful()判断。
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

