JMeter集成Jenkins时命令行生成带线程组名聚合报告咨询
问题根因
你之前尝试的三个方案未达预期,均为工具特性理解偏差导致,不存在功能层面的限制:
FilterResults.bat仅做原始JTL日志的过滤裁剪,本身不具备聚合计算能力,无论使用include还是exclude规则,输出的都是过滤后的原始采样记录,格式和输入JTL一致,不可能直接生成聚合报告。之前include规则下无输出文件,是你传入的标签值和JTL内实际采样名不匹配,无符合规则的采样数据自然不会生成有效文件。JMeterPluginsCMD.bat和cmdrunner调用AggregateReport插件时,默认以采样器名称作为聚合维度,默认不会读取采样所属线程组字段做分组,因此输出结果不会按线程组拆分,也不会展示线程组名称。
可落地方案
以下三个方案均可实现需求,按改造成本从低到高排序:
方案1:最小改动,利用标签规则拆分聚合
不需要额外安装插件,基于你现有工具链即可实现:
- 打开你的JMeter测试计划,为每个线程组下的所有采样器名称增加统一可识别的前缀,比如线程组A下的所有请求统一加
TG1_前缀,线程组B下的加TG2_前缀。如果不想手动改每个采样名,可以在线程组最开头加一个JSR223 PostProcessor,写入如下Groovy脚本自动给当前线程组所有采样打前缀:
def tgName = ctx.getThreadGroup().getName() prev.setSampleLabel("${tgName}_${prev.getSampleLabel()}")
- 原有压测启动命令不需要调整,正常执行生成JTL文件即可。
- 生成单线程组聚合报告时,先用FilterResults按前缀过滤对应线程组的原始数据,再调用JMeterPluginsCMD生成聚合表即可,示例命令(以TG1线程组为例):
:: 过滤出TG1线程组的所有采样记录 D:\apache-jmeter-5.1\bin\FilterResults.bat --output-file C:\Users\temp\Downloads\tg1.jtl --input-file C:\Users\temp\Downloads\tests.jtl --include-labels "TG1_.*" :: 基于过滤后的JTL生成TG1的聚合报告 D:\apache-jmeter-5.1\bin\JMeterPluginsCMD.bat --generate-csv C:\Users\temp\Downloads\tg1_agg.csv --input-jtl C:\Users\temp\Downloads\tg1.jtl --plugin-type AggregateReport
提示:FilterResults的标签匹配支持正则,不需要枚举所有采样名,只要前缀规则一致即可匹配该线程组下所有请求。
方案2:插件原生支持按线程组聚合,无需修改测试脚本
- 通过JMeter Plugins Manager安装Merge Results插件,和你现有2.2版本的插件工具链完全兼容。
- 压测完成后直接执行如下命令,即可生成按线程组分列的聚合报告,包含90/95/99分位、吞吐量、错误率等所有你需要的统计指标:
D:\apache-jmeter-5.1\bin\JMeterPluginsCMD.bat --generate-csv C:\Users\temp\Downloads\all_tg_agg.csv --input-jtl C:\Users\temp\Downloads\tests.jtl --plugin-type MergeResults --generate-group-by-thread-group true
方案3:直接对接Jenkins Performance插件展示
你已经安装的3.0版本Performance插件本身支持分线程组展示报告,不需要额外在命令行生成CSV文件:
- 调整JMeter启动参数,确保JTL中记录线程组字段:
D:\apache-jmeter-5.1\bin\jmeter.bat -Jjmeter.save.saveservice.output_format=xml -Jjmeter.save.saveservice.group_name=true -n -t C:\Users\temp\Downloads\tests.jmx -l C:\Users\temp\Downloads\tests.jtl
- 在Jenkins Pipeline的post阶段添加Performance插件报告采集配置,开启
Show per thread group results选项,构建后即可在Jenkins页面直接查看每个线程组的聚合报告、性能趋势,同时支持配置响应时间、错误率阈值做构建质量判定。
注意事项
- JMeterPluginsCMD和cmdrunner本质是调用同一套JMeter插件核心逻辑,二者选其一使用即可,不需要重复调试。
- 如果使用标签过滤规则,先打开原始JTL文件核对
lb字段(采样标签)的实际值,避免规则不匹配导致过滤结果为空。 - JMeter 5.1版本已经停止维护,如果后续遇到插件兼容问题,可以升级到5.6.x稳定版,上述命令和配置逻辑完全通用。
内容的提问来源于stack exchange,提问作者user19484565
相关产品推荐
相关产品推荐

