逻辑控制器主要用来控制采样器的执行顺序,仅对其子节点的逻辑控制器和采样器其作用。
1.Simple Controller(简单控制器)
简单控制器主要用来组织其他逻辑控制器和采样器,提供了一个块的结构和控制,更方便,更清晰,该控制器不具有逻辑控制功能。
如下:把两个Ant Http Request和两个Log4J Http Request分别放在两个Simple Controller中,执行顺序为Ant Home Page,Ant News Page,Log Home Page,Log History Page。
2.Loop Controler(循环控制器)
循环控制器指定子节点循环的次数,如果线程组中设置了循环次数,则子节点采样器执行的数量为循环控制器数量乘以线程组中设置循环次数,循环控制器中循环次数可以用变量。
如下:Jakarta Users设置的循环数量为1,Loop Controller设置的循环次数为3,则Home Page执行的次数为1次,News Page执行的次数为3次。
3.Once Only Controller(仅一次控制器)
用来控制每个线程只执行一次该控制器下的采样器,如果该控制器在Loop Controller的子节点,则不论Loop Controller设置循环次数为多少次,则Once Only Controller在一个线程只允许一次,如果Thread Group的循环次数设置为多次,而Once Only Controller在Loop Controller的子节点,则Once Only Controller执行循环的次数。一般该控制器用来控制登录,因为通常一个线程只需要登录一次。
a)Loop Controller循环次数为5次,Once Only Controller只执行一次。
2)线程组的循环次数设置为5次,则Once Only Controller执行5次。
4.ForEach Controller
ForEach Controller用来遍历变量的值,每次循环,取的值都不一样,每个变量都是使用下划线和数字扩展,一般和用户定义的变量配置元件一起使用。
示例:
新增加配置元件,用户自定义变量,然后新增加五个用户,如下:
新增加ForEach控制器:
名称:为该Foreach控制器设置一个名称。
输入变量前缀:需要遍历的变量名的前缀,就是下划线前面的,如上就是username。
开始循环字段:开始编号,不包括在循环的值里面。
结束循环字段:结束编号,包含在循环的值里面。
输出变量名称:定义每次循环中我们取的值。
Add“_” before number?是否在数字前面加上下划线。
在ForEach Controller子节点添加Debug Sampler,运行测试,并查看结果,可以看到myDefValue,每次取的值都不一样。
5.Transaction Controller(事务控制器)
事务控制器可以产生一个额外的采样器,用来统计子节点采样器执行的总时间。
说明:Generate parent sample,产生额外的采样器为父节点,如下是勾选和不勾选的区别。
Include duration of timer and pre-post processors in generated sample:计算的总的时间包括定时器和前置处理器的时间。
6.IF Controller
IF Controller用来控制其子节点的元素是否执行,IF Controller中可以使用变量。
示例:
在Thread Group下新增加User Defined Variables,然后添加五组数据:
在Thread Group下新增加ForEach Controller,配置如下:
在ForEach Controller下新增加If Controller,配置如下:
说明:
1)在JMeter4.0版本后If Controller中的表达式部分不支持直接写判断表达式,需要使用__jexl3或者__groovy计算表达式true或false;
2)Evaluate for all children,勾选时执行子节点每个采样器时都会使用If Controller进行判断,不勾选时只在入口执行一次If Controller。
在If Controller下新增加HTTP Request采样器:
运行测试,可以看到只有username为boxiaoyuan时才运行登录请求:
7.Switch Controller
Switch Controller可以根据Switch中设置的值来决定执行子节点的测试元件,有两种方式可以指定,一种是使用索引,从0开始;一种是使用测试元件的名称。
如下,第一个结果为Switch控制器中的Switch Value设置为1,第二个结果为Switch控制器中的Switch Value设置为搜狗。
8.Throught Controller(吞吐量控制器)
吞吐量控制器用来控制子节点测试元素的执行频率,有两种方式,一种是按照百分比的方式;一种是按照数量的方式。
假设线程组设置线程数位2,循环数为4,控制器1设置的吞吐量为百分之50,即所有用户的百分之50,2*4*0.5=4;控制器2设置的吞吐量为3次,即所有用户3次。
现在勾选控制器1的Per User,即每个用户百分之50,4*0.5*2=4,勾选控制2的Per User,即每个用户3次,两个用户就是6次。