【Jmeter】设置线程组运行顺序的方法
方法 1:使用 Test Action
+ If Controller
(推荐)
步骤:
-
禁用默认的并行执行:
-
确保 测试计划 的配置中 不勾选
Run Thread Groups consecutively (i.e. one at a time)
(默认不勾选,表示并行执行)。 -
如果勾选,所有线程组会按顺序执行,但可能影响某些场景的测试。
-
-
-
使用
If Controller
控制执行顺序:-
在第一个线程组的最后添加一个
BeanShell PostProcessor
或JSR223 PostProcessor
(推荐),设置一个全局变量:java
vars.put("THREAD_GROUP_1_DONE", "true");
-
在第二个线程组的开始添加
If Controller
,条件为:text
${__jexl3(vars.get("THREAD_GROUP_1_DONE") == "true",)}
-
这样第二个线程组会等待第一个完成后才执行。
-
方法 2:使用 Critical Section Controller
(插件)
步骤:
-
安装插件:
-
从 JMeter Plugins Manager 安装
Custom Thread Groups
或Inter-Thread Communication
插件。
-
-
使用
Critical Section Controller
:-
在每个线程组前添加
Critical Section Controller
,并设置相同的 锁名称(如LOCK_1
)。 -
这样同一时间只有一个线程组能运行。
-
方法 3:使用 Module Controller
+ Test Fragment
步骤:
-
创建
Test Fragment
:-
右键测试计划 → Add → Test Fragment。
-
将每个线程组放入不同的
Test Fragment
。
-
-
使用
Module Controller
按顺序调用:-
创建一个 主线程组,使用多个
Module Controller
按顺序调用Test Fragment
。
-
方法 4:使用 setUp Thread Group
和 tearDown Thread Group
步骤:
-
setUp Thread Group
:-
用于初始化(最先执行)。
-
-
普通线程组:
-
默认并行执行,但可以通过
If Controller
控制顺序。
-
-
tearDown Thread Group
:-
用于清理(最后执行)。
-
方法 5:拆分测试计划 + 命令行顺序执行
步骤:
-
拆分测试计划:
-
将每个线程组保存为单独的
.jmx
文件(如group1.jmx
、group2.jmx
)。
-
-
使用 Shell/Batch 脚本顺序执行:
bash
jmeter -n -t group1.jmx -l result1.jtl jmeter -n -t group2.jmx -l result2.jtl
总结
方法 | 适用场景 | 是否需要插件 | 备注 |
---|---|---|---|
If Controller + 变量控制 | 简单顺序执行 | ❌ 不需要 | 推荐 |
Critical Section Controller | 需要锁机制 | ✅ 需要插件 | 适合复杂逻辑 |
Test Fragment + Module Controller | 模块化测试 | ❌ 不需要 | 适合大型测试 |
setUp /tearDown Thread Group | 初始化和清理 | ❌ 不需要 | JMeter 内置 |
拆分 JMX + 命令行执行 | 完全独立运行 | ❌ 不需要 | 灵活性高 |
推荐:
-
如果只是简单按顺序执行,使用
If Controller
+ 变量控制(方法 1)。 -
如果需要更高级控制,使用
Critical Section Controller
(方法 2)。 -
如果是大型测试,使用
Test Fragment
+Module Controller
(方法 3)。