JMeter逻辑控制器中,对于用来控制Test Plan执行过程中节点的逻辑执行顺序的Logic Controller:
- ForEach Controller
- If Controller
- Interleave Controller(交替控制器)
- Loop Controller(循环控制器)
- Once Only Controller(仅一次控制器)
- Random Controller(随机控制器)
- Random Order Controller(随机顺序控制器)
- Switch Controller
- While Controller
1.ForEach Controller
参考:https://www.jianshu.com/p/113b3b2b48ec
2.If Controller(如果控制器)
一般用于设置多业务混合场景各业务所占并发比例,请求随机执行,如果需要顺序执行的话,用后面的Interleave Controller(交替控制器)。
jmeter的函数对话框中${__counter(True,)}函数获取当前迭代的次数。
如果将登陆:查询:退出比例设置为1:3:1,可以这样设置IF控制器:
登陆:${__counter(true,)}%5<=1
查询:${__counter(true,)}%5<=4&&${__counter(true,)}%5>=1
退出:${__counter(true,)}%5>4
3.Interleave Controller(交替控制器)
参数配置:默认不勾选以下2项
参数名称 | 含义 |
---|---|
Ignore sub-controller blocks | 忽略子控制器。选中此项,则Interleave Controller将其下的子Controller当成单一元素处理,仅允许每个子Controller一次发出一个请求 |
Interleave across threads | 跨线程交替。选中此项,则交替控制器下的请求将应用至所有线程和循环中迭代 |
4.Loop Controller(循环控制器)
为其下的子节点运行指定循环次数,达到次数则运行完成
案例:线程组中有2个线程,Loop Controller控制循环次数为2,则预期每次循环2个线程,一共执行4个请求
5.Once Only Controller(仅一次控制器)
适用场景:不管线程组中设置循环多少次,让Test Plan中的某些功能对每个线程仅执行一次(如:每个线程仅需要执行一次“登录”操作)
线程1,第1次循环,执行1次登录
线程1,第2次循环,不重复执行登录
线程2,第1次循环,执行1次登录
线程1,第3次循环,不重复执行登录
线程2,第2次循环,不重复执行登录
......
6.Random Controller(随机控制器)
每次执行时,从其子节点中随机选取一个来执行
7.Random Order Controller(随机顺序控制器)
每次执行时,按照随机产生的顺序执行其下的所有子节点
Random Controller | Random Order Controller |
---|---|
随机一个:只选择执行其所有子节点中的一个 | 随机全部:按照随机顺序全部执行其下的所有子节点 |
8.Switch Controller
类似程序语言中的switch函数,Switch Controller根据给定的值n(可使用参数)选择执行其下的第n+1个子节点
Switch Controller只接受整数值,并且给定的值n是以0为基础的,因此当给定的值为2时,意味着Switch Controller下的第3个子节点会被执行;同时,Switch Controller接受参数作为其值
案例:在Switch Controller下只有3个子节点
Switch Value取值 | 执行的节点 |
---|---|
n=-1 | NULL(不执行任何节点) |
n=0 | 节点1 |
n=1 | 节点2 |
n=2 | 节点3 |
n=3 | 节点1(n+1=4>节点总数3,默认执行节点1 |
n=4 | 节点1 |
9.While Controller
While Controller是另一个用于控制循环的Controller,可设置一个Condition,其中Condition的取值可从以下三者之一取得:
- 空
如果Condition取值为空,则该Condition迭代执行While Controller下的所有子节点,直到最后一个子节点失败为止;如果不是最后一个子节点失败,而是While Controller中的其他子节点失败,则While Controller不会停止,而会继续循环执行过程
构造使得非最后一个子节点的其他子节点失败,While Controller确实没有停止
遇到最后一个子节点失败,While Controller就会停止执行
- LAST
如果While Condition取值为字符串LAST,则迭代执行其下的所有子节点,直到最后一个子节点返回失败为止(与While Controller为空时的行为相同);同时,若While Controller的上一个节点失败,则Test Plan在执行时不会进入While Controller
上一个节点失败,不会进入执行While Controller
- 表达式
除了为空、LAST之外,While Controller还可以取一个表达式。当While Controller取值为表达式时,若表达式的取值为字符串FALSE,While Controller就退出循环。
以下列出几个可用的表达式:
${VAR}:当参数VAR的值被设置成false时则退出循环
KaTeX parse error: Expected group after '_' at position 2: {_̲_javascript("{VAR}" == “test001”)}:当参数VAR的值不等于test001时会退出循环