如何在JMeter中为线程组设置恒定请求发送速率?
实现每个线程恒定请求发起速率的方案
要让线程组中每个线程以固定速率发起请求(比如每分钟2个,即每30秒发起一次),可以用JSR223 Timer结合Groovy脚本实现,这能精准控制请求的发起间隔,不受请求耗时影响。
具体步骤
- 在线程组内的SQL请求上方添加一个
JSR223 Timer - 在Timer的脚本区域输入以下Groovy代码:
// 设置每分钟2个请求,即间隔30秒 def interval = 30 def threadCtx = ctx.getThreadContext() def lastStart = threadCtx.get("lastRequestStartTime") def now = System.currentTimeMillis() if (lastStart != null) { def elapsedSeconds = (now - lastStart) / 1000 if (elapsedSeconds < interval) { def delayMs = (interval - elapsedSeconds) * 1000 return delayMs } } // 更新当前请求的开始时间 threadCtx.put("lastRequestStartTime", now) // 首次请求无延迟 return 0
方案说明
- 脚本会为每个线程单独记录上一次请求的发起时间,计算当前时间与上次发起时间的间隔:
- 如果间隔小于设定的30秒,就计算需要延迟的毫秒数,确保到点再发起下一次请求
- 如果间隔已经超过30秒(比如SQL查询耗时超过30秒),则立刻发起下一次请求
- 这个逻辑是在请求发起前执行的,完美匹配“固定发起速率”的需求,和你提到的两个Timer的区别:
Constant Throughput Timer控制的是请求完成速率,不是发起速率,请求耗时越长,实际发起频率越低Constant Timer是在请求完成后添加延迟,间隔是“请求结束到下一次开始”的时间,不符合“固定发起间隔”的要求
内容的提问来源于stack exchange,提问作者vbutto
相关产品推荐
相关产品推荐

