逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。
JMeter逻辑控制器可以对元件的执行逻辑进行控制,除仅一次控制器外,其他可以嵌套别的种类的逻辑控制器。以下是所有控制器图


介绍以下常见4个控制器
1.if控制器
类似于编程语言中if语句,根据给定表达式的值决定是否执行该节点下的子节点,表达式的值为true则执行,为false则不执行;默认使用javascript语法进行判断

jmeter4.0 在Expression输入框中,建议将判断条件解释为变量表达式,并使用__jexl3函数或__groovy函数对该变量表达式求值为true/false
或者可输入值为true/false的变量
${JMeterThread.last_sample_ok}可用于检测最后一个取样器是否成功执行
从上可知,对于JMeter4.0中的If Controller,在Expression输入框中直接输入判断的表达式,如1 == 1、${threadNum} > 2,而不做求值计算(true/false)就执行JMeter是没有效的,达不到预期的效果
利用JMeter自带的函数助手(Function Helper)中的__jexl3函数或__groovy函数,对判断条件的表达式进行求值计算,生成对应的求值运算函数,然后将此运算函数复制到If Controller的Expression输入框中即可

__groovy函数

__jexl3函数
直接在Expression输入框中输入true或false也是可以起到控制节点是否执行的判断依据
2. Transaction Controller 事务控制器
事务响应时间是性能测试重要的指标,事务控制器可以统计其节点下的取样器执行消耗时间

generate parent sample:选择是否生成一个父取样器;
include duration of timer and pre-post processors in generated samle:是否包含定时器,选择将在取样器前与后加上延时(建议不要勾选)。
3. Loop Controller 循环控制器
循环控制器可以控制在其节点下的元件的执行次数,可以是具体数字,也可以是变量

4. While Controller 条件控制器
While条件控制器,其节点下的元件将一直运行直到While 条件为false。

Condition:接受变量表达式与变量。条件为 Flase 的时候,才会跳出 While 循环,否则一直执行 While 控制器下的元件。
3、While控制器提供三个常量
(1)Blank:当循环中最后一个取样器失败后停止 ( 当 While 控制器下最后一个样例执行失败后 跳出循环 )
(2)LAST:当循换前有取样器失败,不进入循环
(3)Otherwise:当判断条件为false时,停止循环
5. Once Only Controller
仅一次控制器下的元件对每个线程只会执行一次。对于需要登录的请求,也可以将请求放在这个控制器下,保证一个线程只登录一次

6. Sample Controller
这是Jmeter里最简单的一个控制器,可以提供一个分组控制,不具备任何的逻辑控制功能 (可以设置不同请求不同的请求头)
7. Random Controller
随机控制器是,每次随机执行其下的某个子节点,在页面的随机访问这种场景会用到随机控制器

Ignore sub-controller blocks(忽略此控制模块):
- 不勾选:随机控制器如果本次随机到子控制器,那么子控制器下的全部请求都会执行
- 勾选:随机控制器将子控制器视为单个请求,如果本次随机到子控制器,那么只会执行子控制器下的一个请求(我试验后,发现每次只会执行子控制器下的第一个请求)
8. Runtime Controller
运行时控制器可以控制子元件运行的时长

Runtime(seconds):运行时间,以秒为单位,0表示不运行
9. Random Order Controller
随机执行其下的所有子节点,和Random Controller不同的是,这个控制器会随机执行所有需要随机的内容,只是顺序不定,和线程组的线程数和循环次数配置无关,就算只有一个线程,只循环一次,也是会全部执行Random Order Controller下的全部请求
10. Switch Controller
开关控制器,通过其下样例顺序数值或名称 控制执行某一个样例

Switch Value:指定请求的索引或者名称,索引从0开始,如果没有赋值,或者索引超过请求个数的话就执行第0个请求。可以是数字,也可以是字符,为字符时匹配取样器名称,如果匹配不上就会默认并找取样器名称为default的取样器,如果没有则不运行。
数值:表示将执行其下第 数值+1个取样器,例如:填1,将执行第2个取样器;填0或者不填,将执行第1个取样器;数值超出其下取样器数目时,执行第1个取样器。
字符:表示执行匹配到的请求
11. Throughput Controller
用来控制其下元件的执行次数,并无控制吞吐量的功能

Total Executions:执行百分比(1-100);
percent Executions:执行数量;
Throughput:根据上边选择的方式填写,百分比为0~100;
Per User:线程数,当选Total Executions时,是线程数;当选percent Executions时,是线程数*循环次数。
不勾选Per User
1、线程组中设置 线程数量 2,循环次数 10,吞吐量控制器 设置 Total Executions,吞吐量设置为 2,其下添加一个取样器,如下图所示:

2、配置好以后,运行JMeter,然后查看结果树(执行了2次),如下图所示:

3、现在将 吞吐量控制器 设置为百分比的控制方式,吞吐量设置为:50%,如下图所示:

4、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了10次,计算方式:10=吞吐量50% * 循环次数10 * 线程数 2),如下图所示:

勾选Per User
线程组中设置 线程数量 2,循环次数 10,吞吐量控制器 设置 Total Executions,吞吐量设置为 2,其下添加一个取样器,勾选Per User

配置好以后,点击“保存”,运行JMeter,然后查看结果树(总共执行了4次,其中吞吐量设置为2,执行2次,线程设置为2,执行2次,总共4次)

现在将 吞吐量控制器 设置为百分比的控制方式,吞吐量设置为:50

查看结果树(执行了10次,计算方式:10=吞吐量50% * 循环次数10 * 线程数 2)

综上所述:
勾选Per User:
1.线程数*循环次数>=线程数*吞吐量时,Total Executions模式的执行次数=线程数*吞吐量。
2.线程数*循环次数<线程数*吞吐量时,Total Executions模式的执行次数=当线程数*循环次数。
不勾选Per User:
1.线程数*循环次数<=吞吐量时,Total Executions模式的执行次数=线程数*循环次数。
2.线程数*循环次数>吞吐量时,Total Executions模式的执行次数=吞吐量。
Percent Executions:设置运行比例(1~100之间),单位为%
不管Per User是否勾选,按Percent Executions模式的执行次数都不受Per User影响,Percent Executions模式的执行次数=线程数*循环次数*吞吐量%。(循环次数=线程组循环次数*循环控制器循环次数)
Per User:勾选该项的话则按虚拟用户数(线程数)来计算执行次数,不勾选则按所有虚拟用户数来计算执行次数





Comments | NOTHING