一、ForEach Controller(遍历循环控制器)
1.使用场景
当前后两个业务请求时,后一个请求的循环次数不是固定次数,而是根据上一个请求每次动态的输出结果个数作为下一个请求循环次数这样的场景就需要用到ForEach控制器。
ForEach控制器的Input variable prefix接收上个请求的变量,并通过Output variable name 输出变量给下一个请求,实现对下面请求循环次数控制。
2.配置说明
Input Variable Prefix:输入变量前缀,从其它地方获取的变量名称
Output variable name:输出变量名称,提供给其它控件引用的变量名称
Start index for loop(exclusive):循环开始的索引(默认从0开始,如果填写是2,实际是从2+1个开始执行)
End index for loop(inclusive):循环结束的索引(默认从0开始,如果填写是2,实际是从2+1个开始执行)
Add””before number:输入变量名称中是否使用“”进行间隔。
二、Loop Controller 循环控制器
1.使用场景
循环操作
2.配置说明
Name:循环控制器名称,随意;
Loop Count:循环次数,输入多少次就做少次
Forever:勾选,则永远循环
备注:循环控制器中可使用变量表示循环次数
三、Once Only Controller (仅一次控制器)
1.使用场景
Once only Controller仅一次控制器,它下面的元件只会运行一次。即使Once only Controller是在循环控制器下面,也只会运行一次。
Once only Controller控制器一般用在只需要执行一次的场景中,例如登录查询订单场景,登录请求只需要执行一次,查询订单循环执行时,可将登录请求放在Once only Controller控制器下面。
2.配置说明
四、Switch Controller 条件控制器
1.使用场景
Switch Controller 可以应用在根据上个请求返回结果的不同,运行Switch Controller中对应的请求
例如:有个订单查询业务,查询到的订单有未支付、已支付、申请退货、等不同的状态。在Switch Controller中判断订单查询请求的订单状态,如果是未支付,则运行支付业务;已支付,则运行发货业务;申请退货,则运行退费业务。
2.配置说明
Switch Value:表示需要执行Switch控制器中的哪一个取样器
Switch Value 值可以用数字、字符和变量
数字:0表示运行Switch控制器里的第一个请求,1表示运行第二个请求以此类推。如果指定的编号超出了下面的节点数或者不指定,则运行第0个取样器
字符:输入Switch控制器里面请求的名称,匹配与请求中的名称相同则执行该请求
五、RandomController 随机控制器
1.使用场景
Random Controller 下面有多个请求,执行测试计划多个请求随机运行,一次迭代只随机运行其中的一个请求
2.配置说明
忽略子控制器:Random Controller下面的控制器不起作用
六、Random Order Controller 随机顺序控制器
1.使用场景、
Random Order Controller和Random Controller区别:
Random Order Controller:一个线程一次循环会运行随机控制器下面所有的子元件。
Random Controller:一个线程一次循环会运行随机控制器随机的一个子元件。
线程组设置:线程数1,循环次数1,sample 4个 运行结果
Random Order Controller下面有四个请求 随机顺序运行了4个请求
Random Controller下面有四个请求 只随机运行了1个请求
2.配置说明
七、Transaction Controller 事物控制器
1.使用场景
事务响应时间是性能测试重要的指标,事务控制器可以统计其节点下的取样器执行消耗时间
2.配置说明
Generate parent sample:勾选,则聚合报告中只显示事务控制器的数据,而不会显示其中的各个请求的数据,反之则全部显示。默认不勾选。
Include duration of timer and pre-post processors in generated sample:是否包含定时器时间,如勾选,则在请求前后加上定时器,那么会将定时器时间包含到响应时间里面。默认不勾选
八、Thoutghput Controller 吞吐量控制器
1.使用场景
Thoutghput Controller是用来控制它下面服务请求执行次数,并非控制吞吐量。它有两个模式分别是Percent Executions和Total Executions
如:一个线程组下面有多个服务请求,每个服务请求都有逻辑控制器,通过逻辑控制器可控制每个服务请求的次数,如总的服务请求为10次,服务请求A 1次,服务请求B 2次,服务请求C 3次
2.配置说明
一个线程组下面多个吞吐量控制器,每个吞吐量控制器下都存在服务请求,给每个吞吐量控制器设置吞吐量,可控制每个服务请求的次数
Percent Executions 按执行次数的百分比计算执行次数 ;百分比模式下,是否勾选Per User对执行次数无影响。所有吞吐量控制器的百分比之和为100%,如吞吐量控制器1,设置吞吐量20,则表示20%,该吞吐量控制器下的服务请求次数,占总执行服务请求次数的20%。
注意:
a:如果所有吞吐量控制器的比例加起来刚好等于100%,那就是按照百分百进行分配执行的;
b:如果加起来超过或者不足100%,那就按照他们之间的比例去分配执行,举个栗子:
吞吐量控制1=20%、吞吐量控制2=20%、吞吐量控制3=80%,则按比例为:1:1:4去分配执行次数
Total Executions 按Throughput设定值来执行次数 Throughput 设置执行次数
Per User 如果选中,则执行次数为每个线程数*Throughput次数;如果不选中,则执行次数为每个线程数
九、交替控制器 Interleave Controller
1.使用场景
添加一个交替控制器,在交替控制器下添加Test-A和Test-B 两个请求。
运行策略:线程组设置1个线程,循环3次。
运行结果:Test-A----->Test-B----->Test-A
2.配置说明
Ignore sub-controller blocks 忽略子控制器,即交替控制器下的子控制器功能失效,不起作用。
Interleave across treads 跨线程交替,线程组在设置了多线程运行时,每一轮循环时,每个线程都在交替控制器中拿到新的请求。
举例说明:
运行策略:线程组设置3个线程,循环1次。
勾选Interleave across treads
运行结果:Test-A----->Test-B----->Test-C (每一个线程都在交替控制器中交替拿到一个新的请求执行)
不勾选Interleave across treads
运行结果:Test-A----->Test-A----->Test-A (每一个线程第一次循环都在交替控制器中拿第一个请求)
十、条件控制器 While Controller
1.使用场景
应用场景:例如在做性能测试过程中,测试商品查询业务运行15分钟的TPS。商品查询业务需要先登录成功才能查询,这个时候就可以在登录业务中设置bean shell Assertion断言,定义一个变量登录成功时为true。将这个变量放在While Controller 中,当判断登录成功后运行While Controller控制器中的商品查询请求。这个时候商品查询请求会一直循环运行下去,直到停止测试计划。
2.配置说明
Condition(function or variable) 可输入变量或变量表达式
还有三个官方提供特殊用途的常量
Blank:当循环中有取样器失败后停止
LAST:当循环前有取样器失败则不进入循环
Otherwise:当判断条件为false时停止
十一、运行时长控制器 Runtime Controller
1.使用场景
Runtime Controller在稳定性场景中需要长时间运行或者为测试计划中某个请求添加运行时间。
2.配置说明
Runtime(seconds) 设置运行执行时间,单位秒。
十二、Include Controller
1.使用场景
Include Controller 功能主要用来导入外部的测试计划(被导入的测试计划不能有线程组),在执行时会执行导入的测试计划。
这种方式的优势在与测试计划中的接口可以根据业务需要任意增加和减少。而且测试计划目录树界面非常简洁直观方便对接口进行管理。
2.配置说明
Include Test Plan 导入测试计划 被导入的测试计划不能有线程组,只能包含控制器及控制器下的元件。
13.如果(if)控制器 If Controller
1.使用场景
IfController控制器在实际的性能脚本场景中应用非常广泛,主要用来根据上个请求执行结果判断是否执行 IfController控制器里面的请求。
例如有两个请求:登录购物网站和添加购物车两个请求,判断当前用户是否登录网站,如果登录则执行下面的加入购物车请求,如果没有登录则不执行加入购物车请求。
2.配置说明
Condition(evaluated with javascript) 定义条件表达式
Interpret Condition as Varible Expression
如果勾选了 interpret condition as variable expression 只能判断表达式结果为true和false。要用Jmeter内置函数_jexl3或者_groovy 转换成true或者false;
如果不勾选,则使用普通条件表达式判断。条件表达式结果可以是true\false之外的表达式。例如:${num} == 1
Evaluate for all childern
勾选:表达式会在ifcontroller节点下的每个取样器之前执行一次,根据表达式结果判断是否执行该取样器
不勾选:只在ifcontroller入口处执行一次,根据结果判断是否执行下面的脚本。