JMeter中如何让一个线程组与另外3个串行线程组并行运行?
解决方案
方案一:单个线程组+Per Sampler模式吞吐量控制(推荐)
这种方案无需多线程组,既能实现API2、API3、API4的串行执行,又能让API1与该串行流程并行,同时精准控制每个API的吞吐量:
创建两个线程组:
- 线程组1:执行API1
- 添加HTTP请求采样器,配置API1的请求参数
- 添加
Constant Throughput Timer,设置:- 吞吐量:2600
- 计算模式:
All active threads in current thread group(该线程组仅含API1,直接控制整体速率即可)
- 线程组2:串行执行API2、API3、API4
- 按顺序添加HTTP请求采样器:API2、API3、API4(默认串行执行,满足提取器依赖需求)
- 为每个采样器单独添加
Constant Throughput Timer(作为采样器的子节点,确保作用域仅对应采样器),每个定时器设置:- API2的定时器:吞吐量15000,计算模式选
Per Sampler - API3的定时器:吞吐量60,计算模式选
Per Sampler - API4的定时器:吞吐量1,计算模式选
Per Sampler
- API2的定时器:吞吐量15000,计算模式选
- 线程组1:执行API1
关键说明:
Per Sampler模式下,每个Constant Throughput Timer会独立控制对应采样器的请求速率,不会互相干扰,解决了你之前单个线程组多定时器失效的问题。- 两个线程组默认并行运行,刚好满足API1与另外三个API的串行流程并行的需求。
方案二:多线程组+串行控制(适合坚持单API单线程组的场景)
如果必须给每个API单独分配线程组,可通过以下方式实现API2、API3、API4的线程组串行,同时与API1的线程组并行:
创建四个线程组:
- 线程组A(API1):配置Constant Throughput Timer为2600 req/min,保持默认并行设置
- 线程组B(API2):配置Constant Throughput Timer为15000 req/min
- 线程组C(API3):配置Constant Throughput Timer为60 req/min
- 线程组D(API4):配置Constant Throughput Timer为1 req/min
控制线程组B、C、D的串行执行:
- 关闭测试计划的
Run Thread Groups Consecutively选项(让线程组默认并行) - 在线程组C的
Thread Group设置中,添加启动延迟:${__groovy(ctx.getThreadGroupByName('线程组B').getEndTime() - ctx.getThreadGroupByName('线程组B').getStartTime(),)},即等线程组B执行完成后再启动线程组C - 在线程组D的
Thread Group设置中,添加启动延迟:${__groovy(ctx.getThreadGroupByName('线程组C').getEndTime() - ctx.getThreadGroupByName('线程组C').getStartTime(),)},即等线程组C执行完成后再启动线程组D
- 关闭测试计划的
效果:
线程组A与线程组B同时启动,线程组B完成后启动线程组C,线程组C完成后启动线程组D,最终实现API1与API2→API3→API4的串行流程并行执行。
注意事项
- 方案一中,务必将每个采样器的Constant Throughput Timer作为子节点添加,避免作用域覆盖其他采样器。
- 方案二中的Groovy函数需JMeter 3.0及以上版本支持。
内容的提问来源于stack exchange,提问作者KeshavKumar
相关产品推荐
相关产品推荐

