如何在JMeter中执行超订测试以模拟超出资源量的预订请求?
JMeter模拟超订场景负载测试实操步骤
1. 先明确测试基准
先搞清楚系统当前的可用资源阈值——比如测试环境里设置100个可预订名额,那超订场景就需要模拟超过100次的并发预订请求(比如150次)。如果是生产环境镜像,先通过查询接口获取当前可用资源数,确保测试前状态可控。
2. 搭建核心测试计划
- 线程组配置:新建线程组,设置线程数为超订请求量(比如150),循环次数设为1(单次并发更贴合瞬间超订场景),线程启动时间设为0(所有线程同时发起请求,模拟真实突发流量)。
- HTTP请求配置:填写预订接口的地址、请求方法(一般是POST),参数要保证唯一性——比如用
${__UUID()}生成唯一用户标识,或者${__threadNum}标记线程号,避免重复请求被系统拦截。
3. 前置:锁定测试初始状态
用setUp线程组在主测试前执行初始化操作:
- 要么调用后台接口把可用资源数设为固定值(比如100);
- 要么调用查询接口确认当前可用资源数,确保每次测试的起始条件一致,避免环境残留数据干扰结果。
4. 关键验证:断言与统计
- 响应断言:针对两种情况设置断言:
- 成功预订的请求:断言响应码为200,且包含"预订成功"之类的业务提示;
- 超订失败的请求:断言响应码为4xx/5xx(根据系统设计),且包含"资源不足""名额已满"等提示。
- 聚合报告分析:重点看这几个指标:
- 成功请求数:应该等于预设的可用资源数(比如100);
- 失败请求数:等于超订的差值(比如50);
- 响应时间:对比成功和失败请求的响应速度,看系统在超订时的性能衰减;
- 自定义统计:用JSR223后置处理器写简单脚本,统计成功/失败请求的数量,比如:
测试结束后在查看结果树里查看这两个变量的最终值。if (prev.getResponseDataAsString().contains("预订成功")) { vars.put("successCount", String.valueOf(Integer.parseInt(vars.get("successCount") ?: "0") + 1)) } else { vars.put("failCount", String.valueOf(Integer.parseInt(vars.get("failCount") ?: "0") + 1)) }
5. 避免并发干扰
- 取消线程组的"延迟创建线程直到需要"选项,确保所有线程同时启动,模拟真实的突发超订;
- 用CSV数据文件配置元件加载独立的用户数据(比如150个不同的用户ID),避免同一个用户重复请求触发业务限制。
6. 事后验证业务规则
测试结束后,调用资源查询接口,验证已预订数量是否等于可用资源数(如果系统不允许超订),或者是否符合预设的超订比例(如果系统允许部分超订),确保系统的业务逻辑在超订场景下正常生效。
内容的提问来源于stack exchange,提问作者OBa
相关产品推荐
相关产品推荐

