You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JMeter中为线程组设置恒定请求发送速率?

实现每个线程恒定请求发起速率的方案

要让线程组中每个线程以固定速率发起请求(比如每分钟2个,即每30秒发起一次),可以用JSR223 Timer结合Groovy脚本实现,这能精准控制请求的发起间隔,不受请求耗时影响。

具体步骤

  1. 在线程组内的SQL请求上方添加一个JSR223 Timer
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:34:59