JMeter如何按指定序列无限循环执行线程组?遇回溯及外部循环限制
在JMeter里实现指定顺序的无限循环线程组执行
核心思路
用Test Fragment把重复的执行单元封装起来,再用Module Controller在后续线程组里调用,同时靠全局属性标记执行阶段,结合Loop Controller实现无限循环,完全符合“不能回之前的线程组、不能在外部加循环”的限制。
具体操作步骤
1. 封装可复用的执行片段
先添加一个Test Fragment,在里面创建两个可复用模块:
- Fragment_TG1_加延迟:把Thread Group 1的所有请求放进来,再添加Constant Timer,设置延迟60000毫秒(即1分钟)
- Fragment_TG2:把Thread Group 2的所有请求放进来
2. 按顺序创建线程组(每个线程组仅执行一次,内部靠控制器控制逻辑)
线程组1:执行初始序列(TG1→延迟→TG2)
- 添加Module Controller,选择
Fragment_TG1_加延迟 - 再添加Module Controller,选择
Fragment_TG2 - 新增User Defined Variables,设置全局属性
stage=2(标记进入下一个执行阶段)
线程组2:执行中间序列(TG1→延迟→TG1→延迟→TG2)
- 添加If Controller,条件写
${__jexl3(${__P(stage,1)} == 2,)},确保仅在stage=2时执行该线程组内容- 内部依次添加两个Module Controller,均选择
Fragment_TG1_加延迟 - 再添加Module Controller,选择
Fragment_TG2 - 最后新增User Defined Variables,设置全局属性
stage=3(标记进入循环阶段)
- 内部依次添加两个Module Controller,均选择
线程组3:无限循环执行重复序列(TG1→延迟→TG2)
- 添加Loop Controller,将循环次数设为
Forever(无限循环)- 内部添加If Controller,条件写
${__jexl3(${__P(stage,1)} == 3,)},确保仅进入循环阶段后执行- 依次添加Module Controller,分别选择
Fragment_TG1_加延迟和Fragment_TG2
- 依次添加Module Controller,分别选择
- 内部添加If Controller,条件写
3. 关键细节说明
- 全局属性控阶段:用
${__P(stage,1)}读取全局属性,保证每个线程组只在对应阶段运行,不会重复执行初始的特殊序列 - 复用片段省重复工作:把TG1和TG2的逻辑封装成Fragment,不用反复复制粘贴,同时满足“不能回之前线程组”的要求——每个线程组只执行一次,内部调用的是封装好的片段,而非回头执行之前的线程组
- 内部循环不碰外部限制:无限循环设置在线程组3内部的Loop Controller里,完全未使用测试计划级别的循环,符合限制条件
无Test Fragment的替代方案
如果无法使用Test Fragment,直接将TG1和TG2的请求复制到对应线程组即可,逻辑保持不变:
- 线程组1:编写TG1请求→添加60秒延迟→编写TG2请求,设置
stage=2 - 线程组2:编写TG1请求→添加60秒延迟→编写TG1请求→添加60秒延迟→编写TG2请求,设置
stage=3 - 线程组3:添加Forever的Loop Controller,内部编写TG1请求→添加60秒延迟→编写TG2请求,用If Controller判断
stage=3时执行
内容的提问来源于stack exchange,提问作者JA VHM
相关产品推荐
相关产品推荐

