首页
学习
活动
专区
圈层
工具
发布

性能工具之Jmeter小白入门系列之三

一、Logic Controller:逻辑控制器

先介绍下逻辑控制器,如图:

Logic Controller大概可分为两类:

l 控制测试计划执行过程中节点的执行顺序,如:Loop Controller、If Controller等;

l 对测试计划中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller、Transaction Controller

1、If Controler:If控制器

说明:

作用:根据给定表达式的值决定是否执行该节点下的子节点。

参数

Condition(evaluated with javascript):用javascript的解释器执行代码,返回 "true" 或者 "false"。

Expression (must evaluate to true of false):表示判断变量值是否等于字符串true或者false(不区分大小写)。比如:${JMeterThread.last_sample_ok}用来判断上个线程是否执行成功

Evaluate for all children:选中此项表示在每个子结点执行前都会计算表达式

Interpret Condition as Variable Expression?:选中此项表达式的条件为:Expression (must evaluate to true of false),不勾选为:Condition(evaluated with javascript)

如:

1、添加线程组

2、添加if逻辑控制器

注:

1、文本框上的黄色感叹号,就是提示你,建议采用__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式。

2、if 控制器 只能作用于其下的子项

3、添加结果查看树

说明:

咱们再设置num初始值为7,但是条件判断中显示的是8;通过验证该if控制器生效。

假如把if控制器设置为8,查看结果为:

显示:

2、Transaction Controller:事务控制器

作用

用于将Test Plan中的特定部分组织成一个Transaction,JMeter中Transaction的作用在于,可以针对Transaction统计其响应时间、吞吐量等。比如说,一个用户操作可能需要多个Sampler来模拟,此时使用Transaction Controller,可以更准确地得到该用户操作的性能指标,如响应时间等。这个时间包含该控制器范围内的所有处理时间,而不仅仅是采样器的。

参数:

Generate parent sample:勾选后,所有的结果将在父结点中展示(一般要勾选)

include duration of timer and pre-post processors in generated sample:勾选后会统计定时器(timer)的时间,否则只统计采样器(sample)的时间

演示:

1、增加线程组

2、增加事务控制器

增加两个请求

3、添加聚合报告

如图:

第一个请求:

第二个请求:

添加聚合报告

运行结果:

把请求全部统计到一个事务中去,并且显示每请求信息;

修改事务控制:

运行查看结果显示,勾选后把所有请求合并到一个事务中:

3、Loop Controller:循环控制器

作用:指定子节点运行的次数,可以使用具体的数值,也可以使用变量

参数:

l Forever选项:勾选上这一项表示一直循环下去

l 如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。

操作步骤:

1、添加线程组

2、添加Loop Controller控制器

3、添加简单java请求【目的为了学习所以才有java 请求】

4、添加结果查看树

点击请求查看结果树:

如果勾选如图,表示永远执行

如图:

4、Once Only Controller:仅一次控制器

作用:在测试计划执行期间,每个线程内,该控制器下的子内容只执行一次,无论循环多少次都只执行一遍。登录场景经常会使用到这个控制器。

注意:将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行。

1、添加线程组

2、添加

3、添加java请求

4、添加结果查看树

5、效果

5、 Include Controller:包含控制器

作用:引用外部的脚本,用来导入外部测试片段(),在执行时会导入。但是导入的测试片段不能包含线程组,只能包含简单的控制元件及控制元件下的子元件(controller和sampler)

操作步骤

1、添加线程组

2、添加Include Controller插件

选择脚本:

添加:{Test Fragment}片段脚本

添加到Include 中

3、添加结果查看树

6、 Module Controller:模块控制器

作用:可以快速的切换脚本,不用来回的新建,方便脚本调试

1、添加两个【Test Fragment】并且在两个模块下新建两个测试【Test Fragment -1】

如上图、添加模块控制器;

操作步骤

1、添加线程组

2、添加 module controller

选择第一个模块点运行:

结果:

3、选择第二模块

4、添加结果查看树

说明:

通过这个模块可以轻松控制两个模块切换

7、 Throughput Controller:吞吐量控制器

作用:控制其下的子节点的执行次数与负载比例分配,也有两种方式:

l Total Executions:设置运行次数,单位为次

勾选Per User:

1.线程数*循环次数>=线程数*吞吐量时,Total Executions模式的执行次数=线程数*吞吐量。

2.线程数*循环次数<线程数*吞吐量时,Total Executions模式的执行次数=当线程数*循环次数。

不勾选Per User:

1.线程数*循环次数<=吞吐量时,Total Executions模式的执行次数=线程数*循环次数。

2.线程数*循环次数>吞吐量时,Total Executions模式的执行次数=吞吐量。

l Percent Executions:设置运行比例(1~100之间),单位为%

不管Per User是否勾选,按Percent Executions模式的执行次数都不受Per User影响,Percent Executions模式的执行次数=线程数*循环次数*吞吐量%。(循环次数=线程组循环次数*循环控制器循环次数)

l Per User:勾选该项的话则按虚拟用户数(线程数)来计算执行次数,不勾选则按所有虚拟用户数来计算执行次数

操作步骤

1、添加线程组

2、添加 7DGroup - Throughput Controller

3、添加java请求

4、添加结果查看树

5、效果

8、 Runtime Controller:时间控制器

作用:用来控制其子元件的执行时长

参数

Name:名称,可以随便填写

Comments:注释,可以随便填写,可以为空

Runtime(seconds):其下组件执行时长,默认为1秒,为0表示其下的组件不执行。

注意:如果此控制器设置的时间指的是该控制器下子节点的执行时间,Thread Group中设定的时间是整个线程组的整体执行时间。一般线程组中的时间要比Runtime Controller设定的时间要大,Runtime Controller设定的时间到了之后,执行Thread Group中其他组件,如果没有其它组件的话会继续执行Runtime Controller中的内容。如果Thread Group中设定的时间比Runtime Controller中设定时间小的话就会按线程组中顺序执行,执行时间到了的话就不会执行Thread Group后面的请求。

操作步骤

1、添加线程组

2、添加Runtime Controllerr如图

3、添加http请求

添加第一请求

添加第二个请求

4、添加View Results in Table

9、 Interleave Controller:交替控制器

作用:每次循环中交替执行不同的controller中请求

参数:

ignore sub-controller blocks:勾选后,子控制器每次只能发起一个请求

Interleave accross threads:勾选之后,第1次循环执行第一个子元素、第2次循环2执行第二个子元素、第3次循环执行第三个子元素。。。

操作步骤

1、添加线程组

2、添加Interleave Controller

3、添加http请求

4、添加结果查看树

10、Random Controller:随机控制器

作用:随机执行其下的子节点

操作步骤

1、添加线程组

2、添加Random Controller

3、添加http请求

4、添加结果查看树

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?:如果定义的变量名中有下划线的话就要勾选此项,否则找不到;反之,没有的话不要勾选,否则同样找不到变量

操作步骤

1、添加线程组

2、添加ForEach Controller

3、添加http请求

4、添加结果查看树

5、效果

12、 Switch Controller

作用:和编程语言中的switch语句类似,执行Switch Value中指定的请求

参数说明:

Switch Value:指定请求的索引或者名称,索引从0开始,如果没有赋值,或者索引超过请求个数的话就执行第0个请求。

操作步骤

1、添加线程组

2、添加Switch Controller

设置条件为2:

3、添加http请求

4、添加结果查看树

运行结果从索引0开始;

下一篇
举报
领券