如何在JMeter中为请求组之间添加延迟?
解决JMeter请求组之间添加延迟的方案
这是个很典型的压测场景,我来给你几个靠谱的解决方案,亲测有效:
方案1:循环控制器 + 测试动作采样器(最直观)
这个方法逻辑清晰,容易维护,推荐优先使用:
配置线程组:
- 设置线程数为
1(如果需要多线程并发可调整,但你的需求是单组发送,1线程足够) - 勾选「调度器」,设置「持续时间」为
1800秒(也就是30分钟) - 循环次数选择「永久」,让线程组在30分钟内持续循环
- 设置线程数为
添加循环控制器到线程组下:
- 设置循环次数为
100,用来重复执行你的单个请求100次(不用复制100个请求,省事儿) - 把你的目标请求放到这个循环控制器里面
- 设置循环次数为
在循环控制器的同级添加测试动作采样器:
- 打开采样器的配置界面,在「Action」下拉菜单选择「Pause」
- 设置「Duration (ms)」为
60000(即1分钟)
这样执行逻辑就是:
执行100次请求 → 暂停1分钟 → 重复上述流程,直到30分钟结束
方案2:事务控制器 + 固定定时器(利用作用域控制)
如果更喜欢用定时器组件,可以用这个方法,注意控制定时器的作用域:
同样先配置线程组(和方案1一致:1线程、30分钟持续时间、永久循环)
添加事务控制器到线程组下:
- 把你的100次请求(或者包了100次循环的请求)放到事务控制器内
- 可以勾选「Generate Parent Sample」,方便查看整个组的聚合结果
在事务控制器的同级添加固定定时器:
- 设置「线程延迟(毫秒)」为
60000 - 关键:确保定时器和事务控制器处于同一级别,且在事务控制器的下方
- 设置「线程延迟(毫秒)」为
这里要注意JMeter定时器的特性:定时器是前置执行的,所以这个定时器会在下一次循环执行事务控制器之前触发等待。也就是说第一次执行100个请求后,下一次循环开始前会先等1分钟,再执行下一组,完全符合你的需求。
方案3:JSR223后置处理器(灵活定制)
如果需要更灵活的逻辑(比如只有当请求组全部成功才等待),可以用脚本实现:
配置线程组和循环控制器(同方案1)
在事务控制器(或100次循环的最后一个请求)的子节点添加JSR223后置处理器:
- 在脚本框中输入:
// 等待1分钟,单位毫秒 Thread.sleep(60000) - 推荐用Groovy语言,性能比BeanShell好
- 在脚本框中输入:
这个方法的好处是可以结合条件判断,比如只有当事务控制器的结果是成功时才执行等待:
if (prev.isSuccessful()) { Thread.sleep(60000) }
额外提示
- 如果你需要精准控制总时长,记得在调度器里设置「持续时间」,而不是靠循环次数计算,这样更可靠
- 测试动作采样器不会生成额外的无效采样结果,不会影响你的压测数据统计
- 如果是多线程场景,记得每个线程都会独立执行这个流程,可根据需求调整线程数
内容的提问来源于stack exchange,提问作者Roman T.
相关产品推荐
相关产品推荐

