JMeter如何为循环迭代间设置延迟而非每个请求添加延迟?
解决JMeter循环后延迟的两种方案
方案1:用Test Action Sampler加延迟(最直观)
操作步骤很简单:
- 打开你的Loop Controller(已设置循环10次),按顺序放好3个HTTP请求。
- 在这3个请求的最后添加一个「Test Action Sampler」。
- 将该Sampler的「Duration (ms)」设为2000——这样每次循环跑完3个请求后,会在这里等待2秒,再启动下一轮循环。
- 若不需要最后一次循环结束后等待,给这个Test Action套一个「If Controller」,条件填写
${__jexl3(${__jm__Loop Controller__idx} < 9,)}(注意把「Loop Controller」替换成你实际的循环控制器名称,idx是JMeter内置的循环索引,从0开始,前9次循环后触发延迟,第10次直接跳过)。
方案2:用JSR223 Timer做条件延迟(无额外采样器)
不想新增采样器的话,用JSR223 Timer更简洁:
- 把「JSR223 Timer」作为Loop Controller的子元素,放在3个HTTP请求的后面。
- 在脚本框中输入以下Groovy代码:
// 获取当前循环的索引(从0开始) def loopIndex = vars.get("__jm__Loop Controller__idx") as Integer // 非最后一次循环则延迟2秒 if (loopIndex < 9) { sleep(2000) }
- 这段代码会在每次循环的最后一个请求执行完成后判断,仅前9次循环结束后触发延迟,最后一次循环直接收尾。
避坑提醒
- 不要把Timer直接放在Loop Controller外部,那样会在整个循环开始前等待2秒,完全不符合需求。
- 使用方案1时,Test Action会被计入采样结果,若不想在报告中显示它,可以给它起个特殊名称(比如「循环后延迟」),之后在监听器中过滤掉,或直接忽略其统计数据。
内容的提问来源于stack exchange,提问作者Jagadeesh Kumar
相关产品推荐
相关产品推荐

