在 CentOS 上使用 JMeter 进行接口测试
一 环境准备
- 安装 Java 8(JMeter 5.x 建议使用 Java 8):
- 安装命令:
sudo yum install -y java-1.8.0-openjdk-devel
- 验证:
java -version
- 安装 JMeter(推荐二进制包方式,便于多版本管理):
- 下载并解压:
wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.tgz && tar -xzf apache-jmeter-5.4.3.tgz -C /usr/local/
- 建议创建软链:
ln -s /usr/local/apache-jmeter-5.4.3 /usr/local/jmeter
- 可选环境变量(便于直接执行 jmeter 命令):
- 在
/etc/profile 末尾添加:
export JMETER_HOME=/usr/local/apache-jmeter-5.4.3
export PATH=$JMETER_HOME/bin:$PATH
- 使配置生效:
source /etc/profile
- 验证:
jmeter -v
- 说明:也可使用 Docker 运行 JMeter,适合隔离环境或快速试用。
二 编写测试脚本
- 方式 A(推荐):在本地 GUI 创建并调试脚本(如 Windows 或带桌面环境的 Linux),保存为 .jmx,再上传到 CentOS 执行。
- 方式 B:在 CentOS 使用命令行工具生成基础脚本(适合简单场景):
- 生成测试计划:
/usr/local/jmeter/bin/jmeter -n -t /dev/null -l /tmp/test.jtl -e -o /tmp/report
- 将生成的 /tmp/test.jmx 下载到本地,用 GUI 完善(添加 线程组、HTTP 请求、断言、监听器 等),再上传回 CentOS。
- 脚本关键要素(建议结构):
- 线程组:设置 线程数、Ramp-Up Period、循环次数/持续时间。
- HTTP 请求:配置 协议、服务器名或 IP、端口、方法、路径、参数/Body、编码。
- HTTP 信息头管理:如 Content-Type: application/json(JSON 接口)。
- 断言:如 响应断言(状态码、包含文本)、JSON 断言(JSON Path 校验)。
- 监听器:如 查看结果树(调试用)、聚合报告(吞吐、响应时间、错误率等)。
三 在 CentOS 非 GUI 模式执行与报告
- 基本执行(最小化输出):
- 命令:
/usr/local/jmeter/bin/jmeter.sh -n -t /path/to/test.jmx -l /path/to/result.jtl -j /path/to/run.log
- 参数说明:
-n 非 GUI 模式
-t 指定测试脚本
-l 保存结果(JTL/CSV)
-j 保存 JMeter 运行日志
- 生成 HTML 报告(需 JMeter 3.0+):
- 命令:
/usr/local/jmeter/bin/jmeter.sh -n -t /path/to/test.jmx -l /path/to/result.jtl -e -o /path/to/html-report
- 报告目录需为空,执行后可在浏览器打开 index.html 查看图表与指标。
- 结果分析要点(聚合报告):
- #Samples(请求总数)、Average/Median/90% Line/Min/Max(响应时间分布)
- Error%(错误率)、Throughput(吞吐量,每秒完成请求数)。
四 参数化与关联
- 参数化常用方式:
- 用户定义的变量:管理不变参数(如域名、端口)。
- 函数助手:如 __Random、__time、__UUID,生成动态数据。
- CSV Data Set Config:从 CSV 文件批量读取参数(适合账号、手机号等)。
- 关联(提取前置接口返回值供后续使用):
- 常用 正则表达式提取器 或 JSON Extractor,将提取结果保存为变量(如 ${token}),在后续请求中引用。
- 断言与验证:
- 响应断言:校验状态码、响应文本、响应头、响应时间等。
- JSON 断言:通过 JSON Path 精确校验返回结构或字段值。
五 持续集成与扩展
- 与 Jenkins 集成(示例 Pipeline):
- 执行与报告:
sh 'jmeter -n -t /usr/local/jmeter/script/test.jmx -l test.jtl -j /usr/local/jmeter/log/test.log'
- 可视化报告:安装 Performance Plugin,在“构建后操作”中 Publish Performance Test Result Report,指定 test.jtl。
- 分布式压测(多台压力机):
- 在各压力机启动 jmeter-server(Linux:
/usr/local/jmeter/bin/jmeter-server)。
- 在控制机 jmeter.properties 中配置
remote_hosts=IP1:1099,IP2:1099,重启 JMeter 后即可远程启动全部压力机。
- 监控可视化(可选):
- 集成 InfluxDB + Grafana 存储与展示压测指标(JMeter Backend Listener 写入 InfluxDB,Grafana 展示面板)。