如何在单个Thread Group中以2TPS负载随机发送多个HTTPS请求?
JMeter单线程组实现2TPS负载+随机请求顺序方案
一、精准实现2TPS负载
之前用Constant Throughput Timer没达到预期,大概率是配置细节没做对,试试这两种更靠谱的方式:
- Constant Throughput Timer(修正版):
- 把定时器放在线程组最外层,确保作用于所有7个请求
- 目标吞吐量填
120(2TPS=2次/秒,换算成分钟就是120次/分钟) - 「Calculate throughput based on」选择「All active threads in current thread group」,避免其他线程组干扰
- 线程组设置为「永远循环」,配合定时器自动控制请求频率
- Precise Throughput Timer(更精准):
如果对TPS稳定性要求高,用这个定时器更好。设置目标吞吐量为2(直接填每秒次数),时间单位选「Seconds」,勾选「Enforce throughput even if some samples are skipped」,它会严格按时间间隔调度请求,比Constant的采样式控制更准确
二、线程数与Ramp-up Period设置
线程数和Ramp-up的核心是保证有足够的线程支撑2TPS,避免因线程阻塞导致请求发不出去:
- 先通过Summary Report估算单个请求的平均响应时间(记为
T秒) - 线程数建议设为
2*T(比如T=1秒,线程数设2;T=2秒,线程数设4),确保处理请求时有空闲线程能发新请求 - Ramp-up Period:如果线程数是N,就设为
N秒(比如线程数2,Ramp-up设2),让线程平稳启动;如果测试允许瞬间启动,也可以设为0 - 实操例子:若每个请求平均响应1秒,线程数设2、Ramp-up设2,线程组循环设为永远,配合上面的定时器就能稳定输出2TPS
三、让7个请求随机发送
打破默认顺序执行,用JMeter自带控制器就能搞定:
- Random Order Controller:把7个HTTPS请求全部拖到这个控制器下,每次线程组循环时,会自动打乱7个请求的执行顺序,确保每次都以随机顺序跑完所有请求
- 如果是想每次随机选一个请求发送(无需全量执行),就用Random Controller,它会在子请求里随机挑一个执行
之前方案失效的可能原因
- Test Fragment本身不会自动执行,必须用Module Controller引用才能生效,若只是把请求放在Test Fragment里没引用,相当于没执行
- Constant Throughput Timer的作用范围选错了,比如只覆盖了部分请求,或者计算吞吐量的基准选了全局线程,导致TPS计算不准
内容的提问来源于stack exchange,提问作者Sikha
相关产品推荐
相关产品推荐

