Jmeter 小白入门系统之三
一、Logic Controller:逻辑控制器
Logic Controller大概可分为两类:
l 控制测试计划执行过程中节点的执行顺序,如:Loop Controller、If Controller等;
l 对测试计划中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller、Transaction Controller
1、IF Controler: if 控制器

如果是通过获取变量去做对比的话,其实和前面的方法类型,但是有个坑就是变量的表达式要通过“ ”括起来,如下:

注:
1、文本框上的黄色感叹号,就是提示建议采用_jexl3 or __groovy 表达式,以提供性能,也就是默认的方法
2、Evaluate for all children:选中此项表示在每个子结点执行前都会计算表达式
3、 inerpret condition as varilable expression : 选中此项表达式的条件为 Expression (must evaluate to true of false),不勾选为:Condition(evaluated with javascript)
如果这个变量是存储的ture或者false,可以直接引用,勾不勾 inerpret condition as varilable expression 都没有关系
2、Transaction Controller: 事务控制器

参数:
Generate parent sample:勾选后,所有的结果将在父结点中展示【一般要勾选】
Include duration of timer and pre-post processors in generated sample:选中这一项会统计定时器(timer)的时间,否则只统计采样器(sample)的时间:在生成的样本中包括定时器和预处理程序的持续时间
2.1 两个参数均勾选;运行后,查看结果树、聚合报告


2.2 勾选Generate parent sample;运行后,查看结果树、聚合报告


2.3 勾选Include duration of timer and pre-post processors in generated sample;运行后,查看结果树、聚合报告


3、LOOP Controller: 循环控制器

作用:指定子节点运行的次数,可以使用具体的数值,也可以使用变量参数:
l Forever选项:勾选上这一项表示一直循环下去
l 如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。
| Loop Controller元素名称 | loop contronller功能 |
| Name | 定义Loop Controller 名称 |
| Comments | 注释,描述Loop Controller在业务中的作用 |
| Loop Count |
设置运行次数 Infinite 勾选为永久运行 |
4、Once Only Controller:仅一次控制器

作用:在测试计划执行期间,每个线程内,该控制器下的子内容只执行一次,无论循环多少次都只执行一遍。登录场景经常会使用到这个控制器。
注意:将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行。
5、Include Controller:包含控制器

作用:引用外部的脚本,用来导入外部测试片段(),在执行时会导入。但是导入的测试片段不能包含线程组,只能包含简单的控制元件及控制元件下的子元件(controller和sampler)
5.1 理解Test Fragment(测试片段)
在测试计划下创建一个Test Fragment 创建成功后,发现 Test Fragment 与线程组 处于同一个层级,而且默认是不启用的
可以看到 Test Fragment 的设置界面除了名称和注释,没有其他设置项,那么它到底是干嘛用呢。选中 Test Fragment ,点击 Jmeter 菜单上的帮助(有问号的书图标),查看官方解释。
可知,Test Fragment 需要与 include Controller或者Module Controller配合使用,Test Fragment 作为一个测试片段 被引入。具体的我们来看看与 include Controller 的使用吧。
5.2 认识include Controller

既然要引入 测试计划文件,那么我们就先来创建一个单独的测试计划吧。
5.3、Include Controller 配合 Test Fragment 的使用
1、先创建一个单独的带有Test Fragment 的测试计划,并保存起来,如下

2、在 include 控制中引入该 测试计划

执行结果:

6、 Module Controller:模块控制器
作用:可以快速的切换脚本,不用来回的新建,方便脚本调试
1、添加两个【Test Fragment】并且在两个模块下新建两个测试【Test Fragment -1】

说明:
通过这个模块可以轻松控制两个模块切换
7、Throughput Controller:吞吐量控制器

作用:控制其下的子节点的执行次数与负载比例分配,也有两种方式:
Throughput Contoller有两种模式:Total Executions 和Percent Executions
- Total Executions:按吞吐量值来指定执行次数。选择此模式,吞吐量值的单位为“次”。
- Percent Executions:按百分比来指定执行次数。选择此模式,吞吐量值的单位为“%”。
- 吞吐量:该值可以是任意整数,如果小于等于0,则一次也不执行。
- Per User:如果勾选该项则按虚拟用户数(线程数)来计算执行次数,如果没有选中该项则按所有虚拟用户数来计算执行次数。
勾选Per User:
1.线程数*循环次数>=线程数*吞吐量时,Total Executions模式的执行次数=线程数*吞吐量。
2.线程数*循环次数<线程数*吞吐量时,Total Executions模式的执行次数=当线程数*循环次数。
不勾选Per User:
1.线程数*循环次数<=吞吐量时,Total Executions模式的执行次数=线程数*循环次数。
2.线程数*循环次数>吞吐量时,Total Executions模式的执行次数=吞吐量。
2.1 Percent Executions:设置运行比例(1~100之间),单位为%
不管Per User是否勾选,按Percent Executions模式的执行次数都不受Per User影响
Percent Executions模式的执行次数=线程数*循环次数*吞吐量%。(循环次数=线程组循环次数*循环控制器循环次数)
2.2 Per User:勾选该项的话则按虚拟用户数(线程数)来计算执行次数,不勾选则按所有虚拟用户数来计算执行次数
8、 Runtime Controller:时间控制器

作用:用来控制其子元件的执行时长参数
Name:名称,可以随便填写Comments
注释,可以随便填写,可以为空
Runtime(seconds):其下组件执行时长,默认为1秒,为0表示其下的组件不执行。
注意:如果此控制器设置的时间指的是该控制器下子节点的执行时间,Thread Group中设定的时间是整个线程组的整体执行时间。
一般线程组中的时间要比Runtime Controller设定的时间要大,Runtime Controller设定的时间到了之后;执行Thread Group中其他组件,如果没有其它组件的话会停止运行
如果Thread Group中设定的时间比Runtime Controller中设定时间小的话就会按线程组中顺序执行,执行时间到了的话就不会执行Thread Group后面的请求。
9、 Interleave Controller:交替控制器

作用:每次循环中交替执行不同的controller中请求
参数:
ignore sub-controller blocks:忽略子控制器,即子控制器功能失效,由交替控制器代替。
Interleave accross threads:勾选之后,第1次循环执行第一个子元素、第2次循环2执行第二个子元素、第3次循环执行第三个子元素。。。
跨线程交替;线程组在设置了多线程运行时,每一轮循环时,每个线程都在交替控制器中拿到新的请求。
场景一:添加一个交替控制器【两个参数均未勾选】,在交替控制下有三个请求:请求1、请求2、请求3
运行策略:线程组设置1个线程,循环4次
运行结果:请求1、请求2、请求3、请求1

场景二:添加一个交替控制器【两个参数均未勾选】,在交替控制器下有三个请求:请求1、请求2、请求3;交替控制器外还有一个请求4
运行策略:线程组设置1个线程,循环4次
运行结果:请求1、请求4、请求2、请求4、请求3、请求4、请求1、请求4

场景三:添加一个交替控制器【勾选gnore sub-controller blocks】,在交替控制器下有三个请求:请求1、请求2、请求3;交替控制器外还有一个请求4
运行策略:线程组设置1个线程,循环4次
运行结果:请求1、请求4、请求2、请求4、请求3、请求4、请求1、请求4

场景四:添加一个交替控制器【勾选Ignore sub-controller blocks】,在交替控制器下有三个请求:请求1、请求2、设置一个循环控制器-循环次数为3的请求3;交替控制器外还有一个请求4
运行策略:线程组设置1个线程,循环4次
运行结果:请求1、请求4、请求2、请求4、请求3、请求4、请求1、请求4 【请求3 -只运行了1次,说明Loop Controller控制器功能失效,已被交替控制器替代;如果不勾选Ignore sub-controller blocks,那么请求3会运行4次】

场景五:添加一个交替控制器【不勾选Interleave across treads】,在交替控制器下有三个请求:请求1、请求2、设置一个循环控制器-循环次数为3的请求3;交替控制器外还有一个请求4
运行策略:线程组设置4个线程,循环1次
运行结果:

场景六:添加一个交替控制器【勾选Interleave across treads】,在交替控制器下有三个请求:请求1、请求2、设置一个循环控制器-循环次数为4的请求3;交替控制器外还有一个请求4
运行策略:线程组设置4个线程,循环1次
运行结果:(每一个线程都在交替控制器中交替拿到一个新的请求执行)

10、Random Controller:随机控制器
作用:随机执行其下的子节点
11、 ForEach Controller

作用:依次调用用户定义的变量,直到最后一个,结束循环。为了满足ForEach Controller提取数据,变量命名的格式一般为“变量名_数字”,其中数字从1开始。
参数说明:
Input variable prefix:输入变量的前缀,也就是自定义变量的前缀;
Start index for loop(exclusive):循环的起始索引index,但是不包含当前值。也就是从index+1开始。
End index for loop(inclusive):循环结束的索引,包含这个值。
Output variable name:输出的变量名,后续可通过${}引用
Add "_" before number?:如果定义的变量名中有下划线的话就要勾选此项,否则找不到;反之,没有的话不要勾选,否则同样找不到变量

配置ForEach controller,将“用户定义的变量名" 的前缀添加好,并设置【输出变量名称】





12、 Switch Controller

作用:和编程语言中的switch语句类似,执行Switch Value中指定的请求
参数说明:
Switch Value:指定请求的索引或者名称,索引从0开始,如果没有赋值,或者索引超过请求个数的话就执行第0个请求。


浙公网安备 33010602011771号