在 Ubuntu 上使用 JMeter 进行 API 测试
一 环境准备
- 安装 Java(JMeter 为 Java 应用,建议 Java 8/11/17/21)。例如在 Ubuntu 上安装 OpenJDK 11:
- 命令:
sudo apt update && sudo apt install -y openjdk-11-jdk
- 验证:
java -version
- 下载并安装 Apache JMeter(以 5.6.3 为例):
- 下载:
wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz
- 解压:
tar zxvf apache-jmeter-5.6.3.tgz
- 配置环境变量(示例放入 /opt):
sudo mv apache-jmeter-5.6.3 /opt/jmeter
- 在
~/.bashrc 或 /etc/profile 中添加:
export JMETER_HOME=/opt/jmeter
export PATH=$JMETER_HOME/bin:$PATH
- 使配置生效:
source ~/.bashrc
- 验证:
jmeter -v(应输出版本号)
二 创建第一个 API 测试计划
- 启动 GUI(仅用于编写/调试脚本):
jmeter
- 在 GUI 中构建测试计划:
- 添加线程组:右键测试计划 → 添加 → 线程(用户)→ 线程组
- 关键参数:线程数(并发用户)、Ramp-Up 时间(秒)(启动全部线程的时长)、循环次数
- 添加 HTTP 请求采样器:线程组 → 添加 → 取样器 → HTTP 请求
- 配置:协议 http/https、服务器名称或 IP、端口、方法 GET/POST/PUT/DELETE、路径
- 在 Body Data 中填入 JSON 请求体(如需要)
- 添加 HTTP 信息头管理器:线程组 → 添加 → 配置元件 → HTTP Header Manager
- 常用头:
Content-Type: application/json、Authorization: Bearer <token> 等
- 添加断言:HTTP 请求 → 添加 → 断言
- 常用:响应断言、JSON Assertion(验证 JSON 路径与值)
- 添加监听器:线程组 → 添加 → 监听器
- 常用:查看结果树(单请求详情)、汇总报告/聚合报告(总体统计)
- 保存为 .jmx 文件,后续可在无头环境复用
三 在无头环境运行与生成报告
- 非 GUI 执行并生成 HTML 报告(推荐在 CI/服务器使用):
- 命令:
jmeter -n -t test_plan.jmx -l result_file.jtl -e -o test_result_folder
- 参数说明:
-n 非 GUI 模式
-t 指定测试计划 .jmx
-l 保存结果到 .jtl
-e 测试完成后生成报告
-o 指定 HTML 报告输出目录(必须为空或不存在)
- 仅保存日志/结果(不生成 HTML):
jmeter -n -t test_plan.jmx -l result_file.jtl
- 在 GUI 中查看 .jtl:打开 JMeter → 监听器 → 聚合报告/查看结果树 → 点击“浏览”加载 .jtl 文件进行分析
四 参数化与批量接口测试
- 使用 CSV Data Set Config 批量驱动用例:
- 线程组 → 添加 → 配置元件 → CSV Data Set Config
- 设置 Filename(CSV 路径)、Variable Names(如 username,password,api,body,exp)
- 常用:忽略首行 True、遇到文件结束符停止线程 True
- 在 HTTP 请求中引用变量:
${api}、${body}、${exp} 等
- 在 JSON Assertion 中使用变量:
${exp} 验证响应
- 典型 CSV 列:用例编号、功能序号、接口地址、请求方法、请求体参数、预期结果等,便于覆盖大量接口与数据组合
五 常见问题与进阶
- 分布式压测(多机施压):
- 在所有 Worker 节点启动服务:
jmeter-server -Dserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=<Worker_IP>
- 在 Controller 节点执行:
jmeter -n -t plan.jmx -l out.csv -e -o report -R <Worker_IP1>,<Worker_IP2>
- 注意正确设置 RMI 主机名,避免回环地址导致无法连接
- WebSocket 等特殊协议:
- 需安装对应插件与依赖(如 WebSocket Sampler 及 Jetty/WebSocket 相关 JAR),放入 lib/ext 目录后重启 JMeter
- 中文界面:编辑 jmeter.properties,将
language=en 改为 language=zh_CN 并重启
- 无头执行权限与路径:确保 JMETER_HOME/bin 在 PATH,且报告输出目录可写