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