2. JMeter 压测脚本怎么设计
JMeter 是性能测试面试中最常被问到的工具。很多同学会创建线程组、添加 HTTP 请求、看聚合报告,但真正的压测脚本设计远不止这些。一个合格的 JMeter 脚本应该包含线程模型、请求配置、参数化、关联、断言、事务控制器、集合点、定时器、监听器、环境变量和结果输出。更重要的是,脚本要能模拟真实业务,而不是机械地重复请求一个接口。
面试中问“JMeter 压测脚本怎么设计”,要按业务链路和脚本结构来回答。比如登录后下单,需要先登录、提取 token、查询商品、创建订单、支付或模拟支付回调,再断言业务结果。
一、先明确压测目标
写 JMeter 脚本前,先确认:
- 压测哪个业务;
- 目标并发是多少;
- 目标 TPS 是多少;
- 响应时间指标是什么;
- 错误率要求是什么;
- 压测持续多久;
- 是否需要登录态;
- 是否有接口关联;
- 是否需要参数化数据。
没有目标的脚本,只是接口调用脚本。
二、线程组怎么设计
线程组用于模拟用户并发。
关键参数:
- 线程数;
- ramp-up 时间;
- 循环次数;
- 持续时间;
- 启动延迟。
例如 100 个线程,ramp-up 100 秒,表示 100 秒内逐步启动 100 个用户,而不是瞬间全部启动。
不要一上来就加很大线程数,要逐步加压。
三、HTTP 请求默认值
可以用 HTTP Request Defaults 配置公共信息:
- 协议;
- 域名;
- 端口;
- 公共路径;
- 超时时间。
这样每个请求不需要重复写 base_url,环境切换也更方便。
四、Header 管理
使用 HTTP Header Manager 管理请求头:
- Content-Type;
- Authorization;
- Cookie;
- User-Agent;
- TraceId。
如果接口需要 token,可以通过变量引用:
Authorization: Bearer ${token}
五、参数化怎么做
参数化用于避免所有线程使用同一份数据。
常见方式:
- CSV Data Set Config;
- 用户定义变量;
- 函数生成随机数;
- 时间戳;
- 前置处理器。
例如登录账号、手机号、商品 ID、订单数据都可以参数化。
六、接口关联怎么做
接口关联是 JMeter 脚本重点。
例如登录接口返回 token,后续接口要使用 token。
可以用:
- JSON Extractor;
- Regular Expression Extractor;
- XPath Extractor;
- JMESPath Extractor。
示例:从响应中提取 token 保存为变量 ${token}。
七、断言怎么设计
压测脚本必须加断言,否则请求返回错误页面也可能被当成成功。
常见断言:
- Response Assertion;
- JSON Assertion;
- Duration Assertion;
- JSR223 Assertion。
断言内容:
- HTTP 状态码;
- 业务 code;
- message;
- 关键字段;
- 响应时间。
性能测试中要特别关注业务成功率。
八、事务控制器
Transaction Controller 用于把多个请求作为一个业务事务统计。
例如“下单”事务可能包含:
- 查询商品;
- 创建订单;
- 查询订单;
- 提交支付。
事务控制器可以统计整个业务链路的响应时间,而不是单个接口。
九、定时器和思考时间
真实用户不会连续毫无间隔地点击。
可以用定时器模拟思考时间:
- Constant Timer;
- Gaussian Random Timer;
- Uniform Random Timer。
思考时间设置过小,会造成不真实压力;设置过大,会降低 TPS。
十、监听器怎么用
调试阶段可以用:
- View Results Tree;
- Summary Report;
- Aggregate Report。
正式压测不建议开启大量图形监听器,因为会消耗资源。
正式压测建议保存结果到 jtl 文件,再离线分析。
十一、脚本调试流程
- 单线程跑通;
- 校验请求参数;
- 校验关联变量;
- 校验断言;
- 小并发试跑;
- 逐步加压;
- 正式压测。
不要脚本没调通就直接高并发压测。
十二、面试回答模板
如果面试官问“JMeter 压测脚本怎么设计”,可以这样回答:
我设计 JMeter 脚本会先明确压测目标和业务链路,再搭建线程组,设置线程数、ramp-up 和持续时间。公共域名和超时时间放在 HTTP Request Defaults,请求头通过 Header Manager 管理。对于登录态,会先调用登录接口,用 JSON Extractor 提取 token,后续请求通过
${token}引用。测试数据用 CSV Data Set Config 参数化,避免多个线程使用同一账号或同一订单数据。业务链路用 Transaction Controller 统计整体响应时间,并添加响应断言或 JSON 断言校验业务 code。调试时先单线程跑通,再小并发验证,最后逐步加压,正式压测时减少图形监听器,保存 jtl 结果用于分析。
十三、常见追问
追问:JMeter 线程数等于并发用户数吗?
可以近似理解为虚拟用户数,但真实并发还和请求响应时间、思考时间、循环方式有关。
追问:为什么要参数化?
避免所有线程使用同一数据造成数据冲突、缓存命中或业务不真实。
追问:为什么正式压测不建议开 View Results Tree?
图形监听器会占用大量内存和 CPU,影响压测机性能。
十四、练习清单
- 创建线程组;
- 设置 ramp-up;
- 添加 HTTP 请求;
- 配置 Header;
- 配置 CSV 参数化;
- 使用 JSON Extractor;
- 添加响应断言;
- 使用事务控制器;
- 添加定时器;
- 保存 jtl 结果。
JMeter 脚本设计的核心是模拟真实业务、保证数据正确、断言业务成功,并且让结果可分析。
配套刷题:

