0
点赞
收藏
分享

微信扫一扫

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

杨沐涵 2023-04-06 阅读 22


性能工具之Jmeter小白入门系列之三_子节点


          冬去春来盼岁月,万物本来无一影;


     在上一讲中简单展示了常用组件,大家也只是有一个大概的概念,但是没有详细讲解怎么使用,这一讲中咱们聊一聊几个组件的常用规则。也许不是完全正确,可以参考下;


一、Logic Controller:逻辑控制器

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

性能工具之Jmeter小白入门系列之三_子节点_02


Logic Controller大概可分为两类:

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

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


1、If Controler:If控制器


性能工具之Jmeter小白入门系列之三_子节点_03


说明:

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

参数

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、添加线程组

性能工具之Jmeter小白入门系列之三_线程组_04

2、添加if逻辑控制器

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

注:

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

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


3、添加结果查看树


性能工具之Jmeter小白入门系列之三_子节点_06


说明:

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

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

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

显示:

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


2、Transaction Controller:事务控制器

性能工具之Jmeter小白入门系列之三_子节点_09

作用

     用于将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、添加聚合报告

如图:

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

第一个请求:

性能工具之Jmeter小白入门系列之三_子节点_11

第二个请求:

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

添加聚合报告

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

运行结果:

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

性能工具之Jmeter小白入门系列之三_子节点_14

修改事务控制:

性能工具之Jmeter小白入门系列之三_线程组_15

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

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



 3、Loop Controller:循环控制器

性能工具之Jmeter小白入门系列之三_线程组_17


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

参数:

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

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

操作步骤:

1、添加线程组

性能工具之Jmeter小白入门系列之三_线程组_18

2、添加Loop Controller控制器

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


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

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


4、添加结果查看树

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

点击请求查看结果树:

性能工具之Jmeter小白入门系列之三_线程组_22


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

性能工具之Jmeter小白入门系列之三_线程组_23

如图:

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




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

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


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

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

1、添加线程组

性能工具之Jmeter小白入门系列之三_子节点_26

2、添加

性能工具之Jmeter小白入门系列之三_线程组_27

3、添加java请求

性能工具之Jmeter小白入门系列之三_子节点_28

4、添加结果查看树

性能工具之Jmeter小白入门系列之三_子节点_29

5、效果

性能工具之Jmeter小白入门系列之三_子节点_30


5、 Include Controller:包含控制器

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


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


操作步骤

1、添加线程组

2、添加Include Controller插件

性能工具之Jmeter小白入门系列之三_线程组_32

选择脚本:

添加:{Test Fragment}片段脚本

性能工具之Jmeter小白入门系列之三_线程组_33

添加到Include 中

性能工具之Jmeter小白入门系列之三_子节点_34

3、添加结果查看树

性能工具之Jmeter小白入门系列之三_子节点_35



6、 Module Controller:模块控制器

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

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

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

操作步骤

1、添加线程组

性能工具之Jmeter小白入门系列之三_线程组_36

2、添加 module controller

选择第一个模块点运行:

性能工具之Jmeter小白入门系列之三_子节点_37

结果:

性能工具之Jmeter小白入门系列之三_子节点_38


3、选择第二模块


性能工具之Jmeter小白入门系列之三_线程组_39

4、添加结果查看树

性能工具之Jmeter小白入门系列之三_线程组_40

说明:

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


7、 Throughput Controller:吞吐量控制器

性能工具之Jmeter小白入门系列之三_线程组_41


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


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

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

勾选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:勾选该项的话则按虚拟用户数(线程数)来计算执行次数,不勾选则按所有虚拟用户数来计算执行次数

操作步骤

1、添加线程组

性能工具之Jmeter小白入门系列之三_子节点_43

2、添加  7DGroup - Throughput Controller

性能工具之Jmeter小白入门系列之三_线程组_44

3、添加java请求

性能工具之Jmeter小白入门系列之三_子节点_45

4、添加结果查看树

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

5、效果

性能工具之Jmeter小白入门系列之三_子节点_47


8、 Runtime Controller:时间控制器

性能工具之Jmeter小白入门系列之三_线程组_48


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

参数

Name:名称,可以随便填写

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

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

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

操作步骤

1、添加线程组

性能工具之Jmeter小白入门系列之三_线程组_49

2、添加Runtime Controllerr如图

性能工具之Jmeter小白入门系列之三_线程组_50

3、添加http请求

添加第一请求

性能工具之Jmeter小白入门系列之三_线程组_51

添加第二个请求

性能工具之Jmeter小白入门系列之三_子节点_52

4、添加View Results in Table

性能工具之Jmeter小白入门系列之三_线程组_53


9、 Interleave Controller:交替控制器

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


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

参数:

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

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

操作步骤

1、添加线程组

性能工具之Jmeter小白入门系列之三_线程组_55

2、添加Interleave Controller

性能工具之Jmeter小白入门系列之三_线程组_56

3、添加http请求

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

4、添加结果查看树

性能工具之Jmeter小白入门系列之三_线程组_58



10、Random Controller:随机控制器

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


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

操作步骤

1、添加线程组

性能工具之Jmeter小白入门系列之三_子节点_60

2、添加Random Controller

性能工具之Jmeter小白入门系列之三_子节点_61

3、添加http请求

性能工具之Jmeter小白入门系列之三_线程组_62

4、添加结果查看树

性能工具之Jmeter小白入门系列之三_线程组_63



11、 ForEach Controller

性能工具之Jmeter小白入门系列之三_线程组_64


作用:依次调用用户定义的变量,直到最后一个,结束循环。为了满足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、添加线程组

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

2、添加ForEach Controller

性能工具之Jmeter小白入门系列之三_线程组_66

3、添加http请求

性能工具之Jmeter小白入门系列之三_线程组_67

4、添加结果查看树

性能工具之Jmeter小白入门系列之三_线程组_68

5、效果

性能工具之Jmeter小白入门系列之三_子节点_69

性能工具之Jmeter小白入门系列之三_线程组_70



12、 Switch Controller

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

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

参数说明:

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

操作步骤

1、添加线程组

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

2、添加Switch Controller

性能工具之Jmeter小白入门系列之三_线程组_73

设置条件为2:

性能工具之Jmeter小白入门系列之三_子节点_74

3、添加http请求

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

4、添加结果查看树

性能工具之Jmeter小白入门系列之三_子节点_76

运行结果从索引0开始;

性能工具之Jmeter小白入门系列之三_线程组_77

在这里引用一句诗送给在阅读的自己

尘劳迥脱〔唐〕希运

尘劳迥脱事非常,紧把绳头做一场。

不是一番寒彻骨,争得梅花扑鼻香。


性能工具之Jmeter小白入门系列之三_线程组_78

举报

相关推荐

0 条评论