JMeter如何并发运行多线程?有依赖的线程组如何实现交叉并行?
JMeter 线程组执行逻辑与跨组依赖配置解答
问题1:勾选线程组串行运行后的执行逻辑
- 勾选测试计划的「Run Thread Groups consecutively (i.e. one at a time)」选项后,JMeter会严格按照线程组在脚本中的排列顺序逐个运行,只有前一个线程组的所有线程全部执行完成后,才会启动下一个线程组。
- 线程组内部的100个线程是否并发,由该线程组的
Ramp-Up时间(秒)参数决定:如果Ramp-Up设为0,100个线程会同时启动完全并发;如果设为N,会在N秒内均匀完成所有线程的启动,同一时间也会有多个线程并行执行,线程组串行的配置不会影响组内的并发逻辑。
问题2:跨组依赖下多线程组并行运行配置方案
你需要实现的是流水线式的执行模式:前序线程组生成一部分数据后,后序线程组就可以用这部分数据启动执行,不需要等前序线程组全部跑完,最终就会出现多个线程组同时运行的状态,配置步骤如下:
- 首先不要勾选测试计划里的「Run Thread Groups consecutively」选项,允许所有线程组同时启动。
- 配置跨线程组的数据传递逻辑:
- 前序线程组的每个线程完成请求后,用
__setProperty函数,以「线程标识+迭代号」作为唯一key,把需要传递的响应数据存入JMeter全局属性props中(props是线程安全的,跨所有线程组共享)。 - 不要使用JMeter变量做跨组传递,变量是线程隔离的,其他线程组无法读取。
- 前序线程组的每个线程完成请求后,用
- 在后序线程组的请求逻辑前加等待判断:
- 添加
While控制器,判断当前线程需要读取的前序数据对应的key是否存在于props中,只有读取到有效数据后才继续执行当前线程的请求。 - 也可以根据业务需求设置批次触发逻辑,比如前序线程组每完成20个线程的执行,就标记批次完成,后序线程组对应批次的20个线程批量启动,执行效率更高。
- 添加
- 按上述配置运行后,只要前序线程组完成了第一批请求,后序线程组就会启动对应第一批的请求,运行一段时间后自然会出现Thread 1还在执行后续批次请求、Thread 4已经在执行前面批次请求的效果,同时能满足每个请求的依赖前置条件。
内容的提问来源于stack exchange,提问作者Shankar PK
相关产品推荐
相关产品推荐

