一、说明
Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”。意思是说,逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。 不同的逻辑控制器可以实现不同的效果,我们在实际测试中,需要根据自己当前的测试场景,来选择合适的逻辑控制器。
二、逻辑控制器类型及用法
1、简单控制器
仅用作将采样器及其相关逻辑控制器等放在一起,组成一个整体结构便于管理和维护,并不具备任何的逻辑控制或者运行时的功能
2、循环控制器
- 指定其子节点在线程组运行一次的过程中运行的次数,可以使用具体数字,或者使用变量,设置多少次,就循环多少次
- 勾选永远,就会一直循环
3、仅一次控制器
在测试计划执行期间,该控制器下的子节点对每个线程只执行一次
4、forEach控制器
可以根据用户的多个变量依次被循环调用,直到最后一个变量被调用即结束循环。
一般需要配合‘用户定义的变量’来使用,作用是参数化
下面我们来看下具体用法。
添加forEach控制器:
- 输入变量前缀:变量的前缀;如要使用的变量为name_1,则需要填name。
- 开始循环字段(不包括):从X+1号的变量开始,X为第几个变量;如填0,实际从第一个开始。
- 结束循环字段(包括):到X的变量结束,X为第几个变量;如填4,实际到第4个
- 输出变量名称:将要用来使用的变量名
- Add“”before number?(数字之前加上下划线“”):用户定义的变量有没有下划线分隔编号,最好还是勾上比较方便标识;
设置完成后,我们在forEach控制器下添加一个调试取样器,来展示取到的变量的值。并添加察看结果树,查看结果
可以看到,线程组运行一次,forEach控制器下引用变量的取样器,每个符合条件的变量都会被执行一次
5、事务控制器
- jmeter中,默认一个取样器,执行一次,就是一个事务
- 可以把多个取样器执行一次请求,合并成一个事务, 就可以模拟用户一个真实操作行为
- 勾选: generate parent sample,在聚合报告中,事务中的所有取样器会被总体展示
6、如果(If)控制器
适用于满足某项条件才去执行某些取样器的场景
6.1 默认情况: 用 jexl3 或 groovy函数, 函数的运算结果为真时, 才会去运行子集的取样器。
条件格式:${__jexl3(条件表达式)}
示例
== 是否等于,如${__jexl3(${VAR}==1,)},判断${VAR}变量是否等于1
!=不等于,如${__jexl3(${VAR}!=1,)},判断${VAR}变量是否不等于1
!非,如${__jexl3(!(${VAR}!=1),)}对${VAR}!=1的结果取反
&&或||且与或,如 ${__jexl3(${VAR}==1 && ${name} != "heima",)}
> 或者>== 大于等于,如${__jexl3(${count}>=10,)}
6.2 如果直接写表达式,去掉 interpret condition as variable expression 复选勾
直接写表达式
- 表达式为真,则执行控制器下的取样器
- 表达式为假,则不会执行控制器下的取样器
7、交替控制器
同一线程的多次循环,会交替执行控制器下的取样器,自上而下每次一个,如果全部执行后会循环执行
8、随机控制器
子节点的取样器,随机执行一个
9、随机顺序控制器
子节点的取样器的执行顺序随机
10、Switch控制器
Switch控制器作用:Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。
有两种赋值方式:
- 第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素,可以和random函数配合使用。
- 第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。
- 当Value为空时,默认执行第1个子节点元素。