如何无需等待响应,每隔30秒执行一次API请求?
解决每隔30秒触发API调用、无需等待响应的方案
方法1:用并行控制器拆分计时和请求
- 保留你原来的Loop Controller(循环次数按需设置,或者勾上永久循环)
- 在Loop Controller下面加个Parallel Controller(并行控制器,记得勾选“Execute each sampler in parallel”选项)
- 给并行控制器建两个子节点:
- 第一个节点放你的Image API请求
- 第二个节点加Constant Timer,设成30000毫秒(也就是30秒)
- 逻辑说明:并行控制器会同时启动两个分支,Timer分支到点就结束,直接触发Loop进入下一次循环;API请求自己跑自己的,不会卡住Timer的计时。不管API响应要多久,下一次请求都会准点在30秒后触发。
方法2:用独立线程组+调度器控节奏
- 新建一个Thread Group(线程组)
- 配置线程组:
- 线程数设1(需要多并发就调大)
- 循环次数勾“永久”
- 打开调度器,启动延迟设0,持续时间填你要跑的总时长
- 在Image API请求前面加Constant Timer,延迟设30000毫秒
- 逻辑说明:线程组会严格按30秒的间隔触发请求,不管上一次请求有没有跑完。因为计时是从上一次请求开始算的,不是等它结束才开始算。
方法3:用代码硬控定时逻辑
- 在Loop Controller里加个JSR223 Sampler
- 在脚本框里写Groovy代码,自己控制计时和请求触发:
// 记录当前时间 def currentTime = System.currentTimeMillis() // 标记要触发API请求 ctx.getSamplerContext().put("triggerRequest", true) // 计算需要等多久,保证刚好30秒间隔 def waitTime = 30000 - (System.currentTimeMillis() - currentTime) if (waitTime > 0) { sleep(waitTime) }
- 把你的Image API请求放在这个Sampler后面,也可以通过JSR223前置处理器判断是否触发请求
- 逻辑说明:这个方法完全绕过JMeter默认的等待逻辑,自己控制时间,间隔精度更有保障。
注意点:
- 并行控制器需要JMeter 5.0及以上版本,老版本可能没有该组件
- 调整线程数时要注意服务器负载,避免压垮目标服务
- 测试时可以查看结果树,确认请求触发间隔是否符合预期
内容的提问来源于stack exchange,提问作者Kalpesh Salvi
相关产品推荐
相关产品推荐

