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

如何在JMeter中实现指定时间内精准调用指定次数的API请求?

在JMeter中实现指定时间内精准调用API指定次数的方案

要在30分钟内精准调用API恰好20000次,仅靠线程数和响应时间配置容易因接口响应波动出现偏差,以下是两种可靠实现方式:

方法一:JSR223脚本精准控制请求间隔(推荐)

通过计算请求间隔时间,抵消接口响应波动的影响,确保总次数和总时间完全匹配:

  1. 线程组配置:
    • 线程数设为1
    • 循环次数设为20000
    • 无需设置持续时间,脚本会自动控制总时长
  2. 添加JSR223 PreProcessor:将其放在API请求前,编写Groovy脚本:
    // 总目标时长(毫秒,30分钟)
    def totalDuration = 30 * 60 * 1000
    // 总请求次数
    def totalRequests = 20000
    // 当前循环次数(从1开始)
    def currentIter = vars.getIteration()
    // 计算每次请求的间隔(第一次请求无需等待)
    def interval = totalDuration / (totalRequests - 1)
    // 已消耗的时间
    def elapsed = System.currentTimeMillis() - ctx.getThreadStartTime()
    // 计算需要等待的时长
    def expectedTime = (currentIter - 1) * interval
    def waitTime = expectedTime - elapsed
    
    if (waitTime > 0) {
        sleep(waitTime)
    }
    
  3. 多线程适配:如果单线程处理速度跟不上(接口响应时间超过计算出的间隔),可拆分线程数:
    • 比如设2个线程,每个线程循环10000次
    • 脚本中totalRequests改为10000,保持totalDuration不变,总次数仍为20000,总时长30分钟

方法二:固定吞吐量定时器(Constant Throughput Timer)

适合对精度要求稍低的场景,配置更简单:

  1. 计算目标吞吐量:20000次 ÷ 1800秒 ≈ 11.11次/秒(或666.67次/分钟)
  2. 线程组配置:
    • 设置足够多的线程数(建议20-30,避免线程不足导致达不到吞吐量)
    • 循环次数设为永远
    • 持续时间设为1800秒(30分钟)
  3. 添加Constant Throughput Timer:
    • 吞吐量填写666.67,单位选择分钟
    • “Calculate throughput based on”选择all active threads (shared),让所有线程共同维持目标吞吐量

注意事项

  • 若接口响应时间波动极大,定时器方案可能出现±5%以内的偏差,此时优先选择JSR223脚本方案
  • 测试前需确保JMeter所在机器性能足够,避免因资源瓶颈导致请求无法按时触发

内容的提问来源于stack exchange,提问作者Vsevolod Bulgartsev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:41:32