小牛丨软件测试学习小牛丨软件测试学习
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
  • 性能测试精华文章

    • 性能测试精华文章
    • 1. 性能测试面试到底问什么
    • 2. JMeter 压测脚本怎么设计
    • 3. 并发用户数和 TPS 怎么理解
    • 4. 响应时间吞吐量错误率怎么分析
    • 5. 性能测试场景模型怎么设计
    • 6. 性能瓶颈定位思路
    • 7. 数据库性能问题怎么排查
    • 8. 服务器监控指标怎么看
    • 9. 性能测试报告怎么写
    • 10. 性能调优建议怎么表达
⌕
🛒项目实战📦资料包🛠测试神器AIAI路线CV简历测评🧭入行测评🧪测开测评🎯训练营🏆案例❤赞赏我

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 文件,再离线分析。

十一、脚本调试流程

  1. 单线程跑通;
  2. 校验请求参数;
  3. 校验关联变量;
  4. 校验断言;
  5. 小并发试跑;
  6. 逐步加压;
  7. 正式压测。

不要脚本没调通就直接高并发压测。

十二、面试回答模板

如果面试官问“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,影响压测机性能。

十四、练习清单

  1. 创建线程组;
  2. 设置 ramp-up;
  3. 添加 HTTP 请求;
  4. 配置 Header;
  5. 配置 CSV 参数化;
  6. 使用 JSON Extractor;
  7. 添加响应断言;
  8. 使用事务控制器;
  9. 添加定时器;
  10. 保存 jtl 结果。

JMeter 脚本设计的核心是模拟真实业务、保证数据正确、断言业务成功,并且让结果可分析。

配套刷题:

  • 性能测试面试题
相关推荐

下一步可以看这些

面试通关软件测试面试通关系列精华文章

把面试题、项目、简历和训练营串成一套求职准备路径。

入行路线零基础入行软件测试专题路径

从测评、学习路线、项目、简历到面试,按顺序入行。

进阶路线初中级测试进阶高级专题路径

接口自动化、性能测试、CI/CD、复杂业务质量保障进阶路线。

AI 方向AI 测试学习路线专题页

大模型评测、RAG 测试、Agent 测试和 AI 自动化路线。

求职结果Offer 案例 / 学员案例展示

看看真实学员 Offer 案例,判断目标和学习投入是否匹配。

资料 / 交流群添加小牛微信

备注:资料、简历、AI 或找工作,领取对应资料或进交流群。

添加小牛微信
Prev
1. 性能测试面试到底问什么
Next
3. 并发用户数和 TPS 怎么理解