Ubuntu 下使用 JMeter 生成 HTML 报告
一 准备环境
- 安装 Java(Ubuntu 推荐 OpenJDK 8 或 11):sudo apt-get update && sudo apt-get install -y openjdk-11-jdk-headless
- 验证:java -version
- 安装 JMeter(示例为 5.4.x):
- 下载并解压:wget -c https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.4.1.tgz && tar -zxvf apache-jmeter-5.4.1.tgz -C /opt
- 配置环境变量(/etc/profile 或 ~/.bashrc):
- export JMETER_HOME=/opt/apache-jmeter-5.4.1
- export PATH=$JMETER_HOME/bin:$PATH
- 生效:source /etc/profile
- 验证:jmeter -v
二 生成报告的两种方式
- 方式一 直接运行脚本并生成报告(推荐)
- 命令:jmeter -n -t your_plan.jmx -l result.jtl -e -o ./report
- 说明:
- -n 非 GUI 模式;-t 指定 JMX 脚本;-l 保存结果到 JTL;-e 测试结束后生成报告;-o 指定报告输出目录
- 若使用 分布式/远程执行,可加 -r
- 方式二 基于已有 JTL 生成报告
- 命令:jmeter -g result.jtl -e -o ./report_from_jtl
- 查看报告:在输出目录打开 index.html(可用本机浏览器打开,或用 scp 复制到本地查看)
三 常用命令参数速查
- -n:非 GUI 模式运行
- -t:指定测试脚本(.jmx)
- -l:指定结果文件(.jtl)
- -e:测试结束后生成 HTML 报告
- -o:指定 HTML 报告输出目录(必须为空或不存在)
- -r:远程执行(分布式压测)
- -j:指定 JMeter 运行日志文件
四 常见问题与排查
- 报告目录非空导致失败:-o 指定的目录必须为空或不存在,否则会报错,请先清理或更换目录
- JTL 结果文件已存在:命令行不会自动覆盖,建议每次使用唯一文件名,或先删除旧文件
- 生成报告中文或路径异常:JMeter 在 Linux 下对脚本路径/内容中的中文字符支持不佳,建议使用英文路径与名称
- 查看历史 JTL 结果:将 .jtl 下载到本地 JMeter GUI,添加监听器(如聚合报告、查看结果树),通过“浏览”加载 JTL 即可查看
- 分布式执行:确保 -r 前已正确配置并启动远程引擎,否则会报错
五 报告定制与高级用法
- 报告字段与格式:在 jmeter.properties 中启用必要字段,例如将结果保存为 CSV 并包含关键列:
- jmeter.save.saveservice.output_format=csv
- jmeter.save.saveservice.label=true
- jmeter.save.saveservice.response_code=true
- jmeter.save.saveservice.successful=true
- jmeter.save.saveservice.time=true
- jmeter.save.saveservice.latency=true
- jmeter.save.saveservice.bytes=true
- jmeter.save.saveservice.sent_bytes=true
- jmeter.save.saveservice.connect_time=true
- jmeter.save.saveservice.assertions=true
- jmeter.save.saveservice.subresults=true
- 报告外观与内容:可配置报告标题与图表项,例如
- jmeter.reportgenerator.report_title=My Performance Report
- 启用/禁用图表:jmeter.reportgenerator.exporter.html.property.graph_response_time_distribution、graph_response_time_percentiles 等
- 图表导出(命令行):使用 CMDRunner.jar 将 JTL 转为 PNG/SVG/CSV 等图表,例如
- java -jar lib/ext/CMDRunner.jar --tool Reporter --generate-png threads.png --input-jtl result.jtl --plugin-type ThreadsStateOverTime