目录
1、Jmeter逻辑控制器解释
2、Jmeter逻辑控制器分类
3、逻辑控制器清单
4、逻辑控制器介绍
(1)如果(If)控制器【If Controller】
(2)事务控制器 (transaction controller)
(3) 循环控制器 (loop Controller)
(4) While 控制器
(5) ForEach 控制器(遍历循环控制器)
(6) Include 控制器
(7) Runtime 控制器
(8) 临界部分控制器
(9) 交替控制器
(10) 仅一次控制器
(11) 录制控制器 (12) 简单控制器
(13) 随机控制器
(14) 随机顺序控制器
(15) 吞吐量控制器
(16)转换控制器(Switch Controller)
(17)模块控制器(Module Controller)
Jmeter中逻辑控制器(Logic Controllers)的作用域只对其子节点的sampler有效,作用是控制采样器的执行顺序。
jmeter提供了17种逻辑控制器,它们各个功能都不尽相同,大概可以分为2种使用类型:
序号 | 控制器名称 | 控制器作用 |
1 | 如果(If)控制器 | 根据判断条件决定是否执行该控制器内的请求,如果是字符串比较条件,参数和字符串都需要加引号,如”{param}” == “test” |
2 | 事务控制器 | 生成一个额外的采样器来测量其下测试元素的总体时间 |
3 | 循环控制器 | 可以设置该控制器内的sampler执行的次数,循环次数与线程的循环次数各自独立 |
4 | While 控制器 | 运行其子节点下的取样器/控制器,直到条件为“假” |
5 | ForEach 控制器 | ForEach 控制器一般和用户自定义变量一起使用,其在用户自定义变量中读取一系列相关的变量。该控制器下的取样器或控制器都会被执行一次或多次,每次读取不同的变量值。 |
6 | Include 控制器 | 用于引用外部的Jmx文件;从而控制多个测试计划组合 |
7 | Runtime 控制器 | 用于控制该控制器下的取样器/控制器的运行时间 |
8 | 临界部分控制器 | 临界区控制器确保其子节点下的取样器或控制器将被执行(只有一个线程作为一个锁) |
9 | 交替控制器 | 假使该控制器下有2个取样器A和B,交替执行A和B2个请求,即每次传递一个子请求到这个测试,按子元件的排列顺序 |
10 | 仅一次控制器 | 该控制器内的请求只执行一次,无论线程循环多少次 |
11 | 录制控制器 | 类似代理服务器的作用,在测试执行期间记录测试样本 |
12 | 简单控制器 | 提供一个块的结构和控制,不具有任何的逻辑控制和运行时的功能; |
13 | 随机控制器 | 类似交替控制器,但该控制器随机选取某一个取样器请求并执行 |
14 | 随机顺序控制器 | 随机执行其下的所有子结点 |
15 | 吞吐量控制器 | 控制其下的子节点的执行次数与负载比例分配,跟吞吐量没任何关系 |
16 | Switch 控制器 | 通过给该控制器中的Value赋值,来指定运行哪个采样器 |
17 | 模块控制器 | 测试控制器子节点下的某一个模块,而不是整个测试计划 |
作用:根据给定表达式的值决定是否执行该节点下的子节点,默认使用javascript的语法进行判断(如下图红框内的文字)。
参数:
Interpret Condition as Variable Expression?:选中这一项时表示:判断变量值是否等于字符串true(不区分大小写) Evaluate for all children:如果选中这一项,在每个子结点执行前都会计算表达式
Jmeter的If控制器支持__jexl3或者是groovy语言,在Jmeter的if控制器中填入表达式时,不能直接编写表达式语言,而是要借用Jmeter的函数生成器,生成指定语言的表达式。
示例一:
使用变量表达式的方式进行判断:
示例二:
选中Interpret Condition as Variable Expression?
,使用变量的方式判断:
作用:生成一个额外的采样器来测量其下测试元素的总体时间;值得注意的是,这个时间包含该控制器范围内的所有处理时间,而不仅仅是采样器的
事务响应时间是我们衡量业务性能的主要指标,事务控制器可以把其节点下的取样器执行消耗时间累加在一起,便于我们统计。同时我们对每一个取样器的执行时间进行统计。
如果事务控制器下的取样器有多个,那么只有每一个取样器都运行成功了,整个事务控制器定义的事务才算成功,这是充分必要条件
作用:指定其子节点运行的次数,可以使用具体的数值,也可是设置为变量(截图描述更详细)
如果在线程组中也设置了执行次数,那么循环控制器下的元件的执行次数是:
循环控制器下的元件的执行次数 = 线程组执行次数 * 循环控制器执行次数
作用:运行其子节点下的取样器/控制器,直到条件为“假”
作用
ForEach 控制器一般和用户自定义变量一起使用,其在用户自定义变量中读取一系列相关的变量。该控制器下的取样器或控制器都会被执行一次或多次,每次读取不同的变量值
输入变量前缀:在其中输入需要遍历的用户参数(User Parameter)
Start index for loop(exclusive):循环指数开始(唯一)→ 遍历查询的变量范围,开始的值(这里如果不填写,默认从1开始,如果没有1开始的变量,执行时会报错)
End index for loop(inclusive):循环指数结束(包含)→ 遍历查询的变量范围,结束的值
输出变量名称:将遍历查询到的符合条件的用户参数赋值给输入变量(Vname),然后就可以在控制器下的取样器使用,格式为${输出变量名}
Add”_”before number:输入变量名称中是否使用“_”进行间隔
PS:这个控制器一般配合配置元件→ 正则表达式提取器来一起使用,可对页面上的某些元素进行重复处理
作用:用于引用外部的Jmx文件;从而控制多个测试计划组合
作用:用于控制该控制器下的取样器/控制器的运行时间
作用:1、确保它的子元素(取样器/控制器等)在执行控制器的子程序之前,只执行一个线程作为指定的锁。
2、确保其子节点下的取样器或控制器将被执行(只有一个线程作为一个锁)。
使用方法:假使该控制器下有2个取样器A和B,交替执行A和B2个请求,即每次传递一个子请求到这个测试,按子元件的排列顺序
作用:在测试计划执行期间,该控制器下的子结点对每个线程只执行一次,登录场景经常会使用到这个控制器。
注意:将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行
作用:类似代理服务器的作用,在测试执行期间记录测试样本
简单控制器是最基本的控制器,对jmeter测试运行没有任何影响,可用来命名某些操作
这是Jmeter里最简单的一个控制器,它可以让我们组织归整我们的采样器和其它逻辑控制器(即:分组功能),提供一个块的结构和控制,不具有任何的逻辑控制和运行时的功能;
作用:类似交替控制器,但该控制器随机选取某一个取样器请求并执行
作用:随机执行其下的所有子结点
· 与Random Controller不同的是,这个控制器会先将需要随机的内容均执行一遍,但次序不定
作用:控制其下的子节点的执行次数与负载比例分配,别被名字迷惑了,跟吞吐量没任何关系。jmeter自带的翻译这里是错误的,因为它并不能控制吞吐量(吞吐量的概念请访问百度);其实质作用是允许用户控制执行的频率;也有两种方式:
百分比执行和总执行
总执行(Total Executions):使控制器停止执行一定数量的测试计划
百分比执行(Percent Executions):使控制器按一定比例执行迭代的测试计划
流量(Throughput):对应上面的执行数量或者比例
每个用户(Per User):每个用户
如果勾选此项,将导致控制器计算是否应该执行在每个用户(每个线程)的基础上;如果不加以控制,那么将计算全球所有用户
作用:Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。有两种赋值方式:
· 第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。
· 第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。
当Value为空时,默认执行第1个子节点元素
作用:测试控制器子节点下的某一个模块,而不是整个测试计划
· 模块控制器,用于跳转到选定的控制器位置并执行对应的控制器
· 应用场景: 业务逻辑的跳转
· 配制说明
· Module to Run: 选择需要跳转到的目标控制器
参考:https://blog.csdn.net/ak739105231/article/details/90728281