5. 性能测试场景模型怎么设计
性能测试不是随便开一批线程压接口,而是要根据业务流量和用户行为设计场景模型。场景模型决定压测是否真实,也决定测试结果是否有参考价值。很多性能测试结果不可信,不是工具问题,而是场景不合理:所有接口平均分配压力、没有思考时间、测试数据不真实、压测时长太短、没有预热、没有稳定运行阶段。
面试中问性能测试场景设计,重点是看你是否能从业务出发,把真实用户行为转成压测模型。
一、先明确测试目标
不同目标对应不同场景:
- 验证系统是否满足预期 TPS;
- 找系统最大承载能力;
- 验证高峰期稳定性;
- 验证长时间运行是否稳定;
- 验证扩容效果;
- 验证某个接口优化效果。
目标不同,压测策略也不同。
二、选择业务场景
不是所有接口都要压。
优先选择:
- 高频访问接口;
- 核心交易链路;
- 资源消耗高接口;
- 历史故障接口;
- 新改造接口;
- 依赖复杂接口。
例如电商系统中,商品查询、搜索、下单、支付回调通常比个人资料编辑更重要。
三、确定业务比例
真实场景中,不同操作比例不同。
例如:
浏览商品 60%
搜索商品 20%
加入购物车 10%
提交订单 8%
支付回调 2%
如果所有接口都按 20% 平均分配,场景就不真实。
业务比例可以来自线上日志、埋点数据、网关统计或业务预估。
四、确定负载模型
常见负载模型:
- 基准测试:低压力下获取基准数据;
- 负载测试:按预期压力运行;
- 压力测试:持续加压找瓶颈;
- 稳定性测试:长时间运行;
- 峰值测试:模拟短时间突增流量;
- 容量测试:找最大承载能力。
面试中要说明你做的是哪种测试。
五、并发和 TPS 目标
目标可以来自:
- 当前线上峰值;
- 未来业务增长预估;
- 大促活动预估;
- SLA 要求;
- 历史访问数据。
例如:当前峰值 QPS 300,预计活动增长 3 倍,则压测目标可以设计到 900 QPS,并留一定冗余。
六、压测节奏设计
一个完整压测场景通常包含:
- 预热阶段;
- 加压阶段;
- 稳定运行阶段;
- 降压阶段。
预热可以让 JVM、缓存、连接池进入正常状态。稳定运行阶段用于观察指标是否持续稳定。
七、思考时间
真实用户操作之间有停顿。完全没有思考时间的脚本可能不真实。
例如用户浏览商品后不会立刻无限下单。
JMeter 可以用定时器模拟思考时间,例如随机等待 1-3 秒。
八、测试数据设计
场景模型必须考虑数据:
- 不同用户;
- 不同商品;
- 不同订单;
- 足够库存;
- 避免缓存过度命中;
- 避免重复使用优惠券;
- 压测数据可清理。
如果所有线程查询同一个商品,可能测的是缓存热点,不是真实业务。
九、混合场景示例
电商下单压测:
场景目标:验证高峰期核心链路承载能力
压测时长:30 分钟
预热:5 分钟
稳定运行:20 分钟
降压:5 分钟
业务比例:浏览商品 60%,搜索 20%,加购 10%,下单 8%,支付回调 2%
指标目标:95 线 < 1s,错误率 < 0.1%,TPS 达到预估峰值
监控:应用 CPU、内存、数据库、Redis、MQ、网关
十、常见错误
- 不基于业务流量设计;
- 所有接口平均分配压力;
- 没有预热;
- 压测时间太短;
- 没有思考时间;
- 数据重复导致缓存失真;
- 没有业务断言;
- 只压单接口不看链路;
- 不监控服务器指标。
十一、面试回答模板
如果面试官问“性能测试场景模型怎么设计”,可以这样回答:
我会先明确性能测试目标,是验证预期容量、找瓶颈还是做稳定性测试。然后选择核心业务场景,比如登录、查询、下单、支付,并根据线上日志或业务预估确定各场景比例,而不是平均分配压力。接着设计并发数、TPS 目标、压测时长、预热时间、稳定运行时间和降压阶段。脚本中会加入参数化、接口关联、业务断言和思考时间,保证压力更接近真实用户行为。执行时同步监控应用、数据库、缓存、MQ、网络等指标,最后根据响应时间、TPS、错误率和资源指标判断是否达标。
十二、练习清单
- 设计登录压测场景;
- 设计商品查询场景;
- 设计下单混合场景;
- 估算业务比例;
- 设计预热阶段;
- 设计稳定运行阶段;
- 设置思考时间;
- 准备压测数据;
- 设置业务断言;
- 准备场景设计回答。
性能场景设计的核心是真实性。压测模型越接近业务流量,测试结果越有价值。
配套刷题:

