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

JMeter如何在性能测试全程保持恒定RPS请求速率?

JMeter实现恒定RPS负载测试的方案

你目前使用的Constant Throughput Timer是基于过往请求的吞吐量动态计算延迟,会受被测服务响应速度影响,无法实现硬恒定的请求发送速率,可通过以下方式实现全程稳定RPS:

方案1:使用Precise Throughput Timer(推荐,JMeter 5.2及以上版本自带)

该定时器专门设计用于输出不受服务响应影响的恒定吞吐量,配置逻辑如下:

  • 替换你现有测试计划中的Constant Throughput Timer为Precise Throughput Timer
  • 核心参数配置:
    • 目标吞吐量:填40(单位为请求/秒)
    • 吞吐量持续时间:填600(对应10分钟)
    • 计算模式选择「所有活跃线程(全局共享)」
  • 注意调整线程数变量${threadnum}的取值,公式为目标RPS * 服务最大预期响应时间(秒),比如40RPS、服务最大响应2秒的场景,至少要配置80线程,避免线程不足导致无法达到目标发送速率。

方案2:JSR223 Timer自定义控制(兼容低版本JMeter)

如果使用的JMeter版本低于5.2,可添加JSR223 Timer,填入以下Groovy代码实现恒定RPS控制:

// 全局存储上次请求发送时间,仅初始化1次
if (props.get("lastSendTime") == null) {
    props.put("lastSendTime", System.currentTimeMillis())
}
// 40RPS对应单请求间隔为1000/40=25ms
def interval = 25
def now = System.currentTimeMillis()
def passed = now - props.get("lastSendTime")
def delay = interval - passed
if (delay > 0) {
    sleep(delay)
}
props.put("lastSendTime", now + Math.max(delay, 0))

现有测试计划调整说明

你当前的jmx配置中其余部分无需修改:

  • 循环控制器设置为-1(永久循环)符合要求
  • 调度器开启后${duration}参数填600即可控制测试总时长为10分钟
  • 测试过程中可通过Summary Report监听器查看每秒请求数统计,正常情况下RPS误差可控制在5%以内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:48:00