如何在JMeter中同时执行多个并行控制器?
解决方案
1. 调整脚本结构,实现真正的并行执行
你当前的脚本结构是单个线程组下包含2个Parallel Controller,这会导致每个线程需要依次完成这两个Parallel Controller的逻辑,无法实现跨线程的并行。正确的结构应该是:
- 创建两个独立的线程组,每个线程组对应一个扫描任务(即原Parallel Controller下的Simple Controller+10个API请求)
- 开启JMeter的线程组并行执行功能:
- 打开JMeter安装目录下的
bin/jmeter.properties文件 - 找到
testplan_threadgroups_in_parallel配置项,将其值改为true - 重启JMeter生效
或者使用JMeter插件的Parallel Thread Group,可以更灵活地控制线程组并行。
- 打开JMeter安装目录下的
2. 确保CSV条码数据不重复且有序取数
在CSV Data Set Config中设置:
Sharing Mode选择All threads,这样两个线程组的所有线程会共享CSV的行指针,依次读取不同的条码,避免重复取数- 确保CSV文件中的条码按预期顺序排列,保证两个线程组能依次获取相邻的条码
3. 精准同步扫描动作
如果需要两个扫描动作严格在同一时间触发,添加Synchronizing Timer到每个线程组的第一个API请求之前:
- 设置
Number of Simultaneous Users to Group By为2,这样两个线程会等待对方到达定时器后,同时执行后续的扫描API - 可以设置
Timeout in milliseconds(比如10000),避免线程无限等待
4. 优化线程启动配置
将线程组的Ramp-Up Period(启动时间)设置为0,让两个线程立即启动,避免因启动延迟导致的执行顺序偏差;线程数保持为1(每个线程组1个线程),这样两个线程组各启动1个线程,刚好对应两个并行的扫描任务。
补充说明
如果必须使用单个线程组,也可以将两个扫描逻辑放到同一个Parallel Controller下,让它们在同一个线程内并行执行,但这种方式的并行度依赖于JMeter的线程内调度,不如多线程组并行稳定。
内容的提问来源于stack exchange,提问作者Tushar Chaudhary
相关产品推荐
相关产品推荐

