如何在JMeter中按不同时间段分配差异化的请求负载量
JMeter 分时段差异化负载配置方案
以下是三种可落地的实现方式,按需选择即可:
方案1:使用吞吐量整形计时器(最推荐,配置最简单)
这是针对阶梯/分段负载场景的官方推荐插件方案:
- 先通过JMeter插件管理器安装
Custom JMeter Plugins组件包,找到Throughput Shaping Timer插件安装后重启JMeter - 在你的业务请求所在线程组下添加该计时器,在
Schedule配置区按行填写时段规则,每行三个参数格式为[时段持续时间(秒)], [目标RPS(每秒请求数)], [启动偏移量(填0即可)] - 按你给出的前3小时需求,配置示例如下:
3600, 0.56, 0
3600, 0.83, 0
3600, 0.28, 0
- 线程数设置为峰值并发所需的1.2倍以上,避免线程不足导致无法达到目标RPS,勾选计时器的Shared Thread Pool选项即可全局生效
方案2:多线程组分段执行(适合需要独立配置不同时段请求逻辑的场景)
不需要额外插件,用原生功能即可实现:
- 按你需要的时段数量添加对应个数的线程组,每个线程组对应一个时段的负载需求
- 单个线程组配置示例(以第1小时2000次请求为例):
- 调度器勾选
启用,启动延迟填0,持续时间填3600 - 线程数和循环次数乘积等于2000即可,比如设20个线程,循环100次
- 调度器勾选
- 后续时段的线程组依次把启动延迟改为前序所有时段的总时长,比如第2小时启动延迟填
3600,第3小时填7200,以此类推 - 测试计划设置页不要勾选
独立运行每个线程组,保证所有线程组按配置的启动时间并行加载
方案3:JSR223 动态控制速率(适合自定义规则非常复杂的场景)
如果你的分段规则需要动态调整,可以用Groovy脚本实现:
- 在线程组下添加JSR223 PreProcessor,选择Groovy作为脚本语言,填入示例逻辑:
// 计算测试已运行时长(单位:秒) long testStartTime = ctx.getTestStart() / 1000 long elapsedSec = (System.currentTimeMillis() / 1000) - testStartTime // 按时段配置RPS float targetRps if (elapsedSec < 3600) { targetRps = 0.56f // 第1小时 2000次/3600秒 } else if (elapsedSec < 7200) { targetRps = 0.83f // 第2小时 3000次/3600秒 } else if (elapsedSec < 10800) { targetRps = 0.28f // 第3小时 1000次/3600秒 } // 后续时段规则自行补充 props.put("dynamic_rps", targetRps)
- 再添加恒定吞吐量计时器(Constant Throughput Timer),目标吞吐量填写
${__P(dynamic_rps, 1)},计算基准选择所有活跃线程的总吞吐量即可
验证注意事项
测试前建议先做短时间压测验证,比如把1小时时长改成1分钟,请求量等比缩小,查看Summary Report的Samples总数是否符合预期,确认配置无误后再跑10小时全量测试,正常误差范围在1%以内。
内容的提问来源于stack exchange,提问作者James P.
相关产品推荐
相关产品推荐

