逻辑控制器
JMeter逻辑控制器可以对元件的执行逻辑进行控制,除仅一次控制器外,其他控制器下可以嵌套别的种类的逻辑控制器。
下展示了控制器的种类
ForEach Controller(循环控制器)
ForEach( Controller即循环控制器,顾名思义是定义一个循环规则
参数说明如下
名称:控制器名称,可以随意设置,甚至可以为空
注释:可以随意设置,可以为空
输入变量前缀:可以在“用户自定义的变量”中定义一组变量循环控制器可以从中获取到变量对应的值,然后作为循环控制器的循环条件,还可以输出变量作为取样器的参数。如图6-3所示
Start index for loop:循环变量下标起点
End index for loop:循环变量下标终点
输出变量名称:循环控制器生成的变量名称
Add“_" before number'?:变量前缀后是否加“”作为分隔符
设想一下,有这样一个业务
在订单查询页面我们查询到了订单号,然后要对每一条订单进行出库,此时我们需要遍历每一条订单,是不是可以以订单号作为循环条件?
此时我们就可以用正则表达式提取器提取到订单号,然后用 Foreach controller来循环处理订单的出库操作。
Simple Controller
Simple Controller用来指定一个执行单元,他不改变元件的执行顺序,主要作用是用来组织采样器和其他的逻辑控制器
简单控制器只有名称和注释.
比如说我们可以用它组织模块,在各个模块里在进行请求的发送,这样看起来各模块比较独立,好维护一些。
Include Controller
Include Controller用来导入外部的测试片段,这个片段并不是完整的测试计划,导入的这个测试计划是不能有线程组的,只能包含简单的控制器以及控制器下的元件。相当于执行了封装了业务操作到的单元,相当于将一些通用的功能逻辑封装,在这里进行调用。
Runtime Controller
用来控制器子元件的执行时长,单位是秒
Switch Controller
Switch Controller条件控制器,类似于编程语言里的switch语句
比如由上图的配置,Switch Controller下面有两个java request,jmeter会给下面的java请求进行编号,第一个为0,第二个为1以此类推
如果上面switch Value设置0,那么第一个java request就会执行。如果指定的编号超出了控制器下面的节点数,或者没有指定,则会默认运行第一个节点。
Switch Controller也可以指定取样器的名称,名称匹配时大小写以及空格都铭感,如果匹配不上则不运行取样器。
While Controller
While条件控制器,其节点下的元件将一直运行知道while条件为false
Condition:接受表达式与变量,还可以输入常量,也就是jmeter内置的默认值
LAST:当循环前有取样器失败则不进入循环
BLANK:当循环中有取样器失败后停止
Otherwise:当判断条件为false停止循环
Interleave Controller
Interleave Controller交替控制器,其节点下的取样器会交替执行,
假设我们有如上的线程组和交替控制器的配置,线程组下面有一个请求3,交替控制器下面有请求1和请求2,线程组配置一个线程循环且循环三次,执行以下我们来看看请求的执行顺序。
循环三次,总共有六个请求发出,也就是说每一次循环会执行线程组下面的请求和交替控制器里的一个请求。
Once only controller
仅一次控制器,也就是此控制器下的子元件只运行一次,即使把仅一次控制器放在循环控制器下面,也只是运行一次 , 如果我们把仅一次控制器放在线程组下面,仅一次控制器也只运行一次
throughput controller
用来控制其下元件的执行次数(如图6-20所示),并无控制吞吐量的功能,想要控制吞吐量可以使用 Constant Throughput Timer,后面会讲解到。吞吐量控制器有两种模式: Total Executions 与 Percent Executions
If controller
Module controller
Random & Random Order Controller
随机执行,random order 每个元件只执行一次
LOOP controller
Transaction controller
事务响应时间是我们衡量业务性能的主要指标,事务控制器可以把其节点下的取样器执行消耗时间累加在一起,便于我们统计。同时我们对每一个取样器的执行时间进行统计。
如果事务控制器下的取样器有多个,那么只有每一个取样器都运行成功了,整个事务控制器定义的事务才算成功,这是充分必要条件
参数说明如下
名称:控制器名称,可以随意设置,甚至可以为空
注释:可以随意设置,可以为空
Generate Parent sample:选择是否生成一个父取样结果,图6-31除了生成 Java request与 Java Request2的取样结果,还会和成一个 Transaction Controller取样结果。如图6-32所示在 Aggregate Report中我们只可以看到 Transaction Controller的取样。在Ⅴiew Retum tree中(图6-33)我们可以看到父取样中有两个子取样器结果