JMeter中如何获取所有线程执行完毕后/a与/b的重定向统计值
解决JMeter全局统计重定向到/a和/b次数的问题
你的问题出在默认的Counter元件是线程局部变量——每个用户线程都会维护自己的计数副本,所以输出的都是单个线程内的累计值,而非所有线程的全局总和。下面给你两种直接可行的解决方式:
方式一:用全局属性+JSR223 PostProcessor统计
这是最灵活的方案,适合自定义统计场景:
- 确保你已经用正则提取器正确拿到了重定向目标(比如变量名设为
redirect_target,值为a或b) - 在重定向请求下方添加JSR223 PostProcessor,选择Groovy语言,写入以下脚本:
def target = vars.get("redirect_target") if ("a".equals(target)) { def currentCount = props.get("count_a") ?: 0 props.put("count_a", currentCount + 1) } else if ("b".equals(target)) { def currentCount = props.get("count_b") ?: 0 props.put("count_b", currentCount + 1) }
这里props是JMeter的全局属性容器,所有线程共享,所以计数会累加所有用户的访问结果。
- 查看最终统计:
添加JSR223 Listener,写入脚本在测试结束后输出全局统计:
if (ctx.getThreadNum() == 0 && ctx.getThreadGroup().getNumThreads() == ctx.getThreadGroup().getNumberOfActiveThreads()) { log.info("=== 最终重定向统计 ===") log.info("/a 访问次数:" + props.get("count_a")) log.info("/b 访问次数:" + props.get("count_b")) }
或者直接在测试计划结束阶段添加一个Test Action元件,配合JSR223 PostProcessor把结果输出到本地文件。
方式二:用断言+Summary Report快速统计
如果不需要自定义输出,用JMeter自带的报告组件更省心:
- 给重定向请求添加两个Response Assertion:
- 第一个断言:选择“响应字段→JMeter变量”,变量名填
redirect_target,匹配规则选“匹配字符串”,值填a - 第二个断言:同样配置,值填
b
- 第一个断言:选择“响应字段→JMeter变量”,变量名填
- 添加Summary Report,勾选“Include assertion results”选项。测试结束后,Summary Report里会分别显示匹配
a和b的请求总数,直接读取即可。
注意事项
- 先通过Debug Sampler确认
redirect_target变量能正确提取到a或b,避免统计逻辑基于错误的数据源 - JSR223元件优先用Groovy,性能比BeanShell更稳定,适合高并发场景(比如1000用户)
内容的提问来源于stack exchange,提问作者sunny
相关产品推荐
相关产品推荐

