在 Debian 上使用 JMeter 进行接口测试
一 环境准备
- 安装 Java 8/11(JMeter 5.x 要求 Java 8+)。在终端执行:
- 更新索引:
sudo apt update
- 安装 OpenJDK:
sudo apt install openjdk-11-jdk -y
- 验证版本:
java -version
- 安装 JMeter(两种常用方式,二选一)
- 方式 A(推荐,便于系统管理):
sudo apt install apache-jmeter -y
- 方式 B(官方压缩包,便于多版本并存):
- 下载:
wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.3.tgz
- 解压:
tar -xzf apache-jmeter-5.4.3.tgz -C /opt
- 配置环境变量(示例为 /opt):
echo 'export JMETER_HOME=/opt/apache-jmeter-5.4.3' >> ~/.bashrc
echo 'export PATH=$JMETER_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
- 验证:
jmeter -v
- 说明:JMeter 是 Java 应用,需先确保 Java 正确安装与配置。
二 创建第一个接口测试
- 启动 GUI(仅用于调试):
jmeter
- 在 GUI 中构建测试计划
- 添加线程组:右键测试计划 → Add → Threads (Users) → Thread Group
- 关键参数:Number of Threads (users)、Ramp-Up Period (seconds)、Loop Count
- 添加 HTTP 请求:线程组 → Add → Sampler → HTTP Request
- 配置协议(http/https)、服务器名称或 IP、端口、方法(GET/POST)、路径
- GET 参数填在 Parameters;POST 的 JSON 放在 Body Data
- 添加请求头(POST JSON 必需):线程组 → Add → Config Element → HTTP Header Manager
- 新增:
Content-Type: application/json
- 添加断言:线程组 → Add → Assertions → Response Assertion
- 添加监听器(调试用):线程组 → Add → Listener → View Results Tree、Aggregate Report
- 运行与查看:先在 GUI 点击 Start 验证脚本逻辑与响应,再进入下一节的非 GUI 执行与报告。
三 非 GUI 执行与报告生成
- 执行测试(推荐在服务器环境使用非 GUI):
- 基本命令:
jmeter -n -t /path/to/api_test.jmx -l /path/to/results.jtl
-n 非 GUI;-t 指定测试计划;-l 保存结果到 JTL 文件
- 生成 HTML 报告(基于 JTL):
jmeter -g /path/to/results.jtl -o /path/to/report
- 说明:正式压测请关闭 View Results Tree 等监听器,仅输出 JTL,避免高内存占用。
四 参数化、关联与数据库校验
- 参数化(数据驱动)
- CSV Data Set Config:从 CSV 读取多组账号/参数;变量名在请求中用 ${变量名} 引用
- 函数助手:如 __Random、__time、__UUID 生成动态数据
- 关联(提取前置接口返回值供后续使用)
- 正则表达式提取器 或 JSON Extractor 提取 token/session 等,存入变量供后续请求引用
- 数据库校验(JDBC)
- 将对应数据库驱动 JAR 放入 JMeter 的 lib/ 目录
- 添加 JDBC Connection Configuration(配置 URL、驱动、账号、密码)
- 添加 JDBC Request 执行查询,结合断言校验结果集
- 说明:以上元件均可在线程组下按需添加,适合多接口串联与业务一致性校验。
五 分布式压测与常见问题
- 分布式压测(多机施压)
- 在所有 Agent 上启动:
jmeter-server(位于 JMeter 的 bin 目录)
- 在 jmeter.properties 配置控制机:
remote_hosts=192.168.1.2:1099,192.168.1.3:1099
- 控制机执行:
jmeter -n -t api_test.jmx -R 192.168.1.2,192.168.1.3 -l result.jtl
- 如遇 RMI SSL 报错,可在所有节点将
server.rmi.ssl.disable=true(取消注释并设为 true)后重启
- 常见问题速查
- 415 Unsupported Media Type:未设置
Content-Type: application/json,在 HTTP Header Manager 中补充
- 中文乱码:在 HTTP Request 的 Content Encoding 填 UTF-8
- 连接失败:核对 IP/端口、服务是否启动、服务器防火墙/安全组策略
- JMeter 版本不一致:跨平台编辑 JMX 时,控制机版本应不低于执行机版本
- 说明:分布式场景需保证各节点 Java/JMeter 版本一致、网络互通、时间同步。