1. JMeter元件介绍及执行顺序
- 取样器是典型的不与其它元件发生交互作用的元件
- 逻辑控制器只对其子节点的取样器有效
- 而其它元件(config elements 、timers 、post-processors、assertions、listeners、)需要与取样器(sampler)等元件交互。
1、配置元件
- 用来提供对静态数据配置的支持。例CSV Data Set config可以将本地数据文件形成数据池(Date Pool)
- 元件会影响其作用范围内的所有元件。
2、定时器(具有LR的Think_time功能)
- 用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。
- 元件对其作用范围内的每一个sampler 有效
3、前置处理器
- 用于在实际的请求发出之前对即将发出的请求进行特殊处理。例当url中有SessionID一类的信息时,可以通过该处理器填充发出请求实际的SessionID。
- 元件在其作用范围内的每一个sampler元件之前执行。
4、后置处理器(具有类似于LR中的关联功能)
- 用于对Sampler发出请求后得到的服务器响应数据进行处理,一般用于提取响应中的特定数据。
- 元件在其作用范围内的每一个sampler元件之后执行。
5、断言(具有类似于LR中的检查点功能)
- 用于检查测试中得到的响应数据是否符合预期。断言一般用来设置检查点,验证测试过程中的数据交互是否与预期一致。
- 元件对其作用范围内的每一个sampler 元件执行后的结果执行校验。
6、监听器(具有类似于LR中的日志功能)
-
用来对测试结果数据进行处理和可视化显示的一系列原件。图形结果、查看结果树、聚合报告等都是比较常用的原件。
-
元件收集其作用范围的每一个sampler元件的信息并呈现。
7、取样器–Sampler
是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元。每一种不同类型的Sampler可以根据设置的参数向服务器发送不同的请求。
8、逻辑控制器
逻辑控制器的作用域只对其子节点的sampler有效,作用是控制采样器的执行顺序。
- 分为两类元件:
- 一类用于控制Test Plan中Sampler节点发送请求的逻辑顺序控制器,常用的有 如果(If)控制器、Swirch Controller、Runtime Controller、循环控制器等。
- 另一类用来对Test Plan中的脚本进行分组,方便Jmeter统计执行结果以及脚本运行时的控制。如事务控制器、吞吐量控制器等。
元件的执行顺序
1、配置元件(Config Elements)
2、前置处理器(Pro-processors)
3、定时器(Timers)
4、取样器(Sampler)
5、后置处理器(Post-processors)
6、断言(Assertions)
7、监听器(Listeners)
需注意事项
- 取样器是典型的不与其它元件发生交互作用的元件,
- 前置处理器、后置处理器和断言等元件功能对取样器作用。因此,如果在它们的作用域内没有任何取样器,则不会被执行;
- 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行。
- 一个断言在测试树中是分等级的。如果它的父元件是请求,它就被应用于那个请求。如果它的父元件是控制器,它就影响所有那个控制器下的所有请求
- 逻辑控制器只对其子节点的取样器有效,而其它元件(config elements 、timers 、post-processors、assertions、listeners、)需要与取样器(sampler)等元件交互。
2. Jmeter逻辑控制器
什么是逻辑控制器?
概念:Jmeter逻辑控制器是可以控制采样器(Sampler)的执行顺序,它由多个逻辑控制语句封装成不同功能的组件组成
逻辑控制器作用域
作用域:只对其子节点的sampler有效
逻辑控制器
逻辑控制器共有 17个,分别是:
1、If Controller【如果(If)控制器】
2、Transaction Controller【事务控制器】
3、Loop Controller【循环控制器】
4、While Controller【While 控制器】
5、ForEach Controller 【ForEach 控制器】
6、Include Controller【Include 控制器】
7、Runtime Controller【Runtime 控制器】
8、Critical Section Controller【临界部分控制器】
9、Interleave Controller【交替控制器】
10、Once Only Controller【仅一次控制器】
11、Recording Controller【录制控制器】
12、Simple Controller【简单控制器】
13、Random Controller【随机控制器】
14、Random Order Controller【随机顺序控制器】
15、Throughput Controller【吞吐量控制器】
16、Switch Controller【Switch 控制器】
17、Module Controller【模块控制器】
1.1 如果(If)控制器
作用:
-
条件成真,则执行控制器下所有取样器,根据给定表达式的值决定是否执行该节点下的子节点,条件可以使用 JavaScript 与变量表达式。
-
判断if控制器里面的语句是否为真,如果为真继续执行
案例1:1==1,则执行登录用例
步骤:
-
添加if控制器
- 线程组 > 添加 > 逻辑控制器 > 如果 (if) 控制器
-
在if控制器下面添加
登录接口
HTTP请求以及察看结果树 -
编写Expression
-
建议使用
__jexl3
函数,可通过菜单栏->tools->函数助手,选择功能__jexl3
-
在JEXL值处添写表达式1==1,点击生成
-
可以看到生成的函数字符串,直接复制即可
-
${__jexl3(1==1,)}
-
-
The result of the function is 表示的是该表达式的结果
-
结果为true
-
-
-
-
把函数
${__jexl3(1==1,)}
复制到if控制器里 -
-
运行及查看结果
-
-
结果
-
表达式为true时
-
表达式为false时
-
-
结果为空,未执行登录接口
-
-
-
参数详解:
步骤:
- 添加如果(if)控制器
- 线程组 > 添加 > 逻辑控制器 > 如果 (if) 控制器
- 编写Expression,
${__jexl3("${__property(token,,)}"!= "")}
-
名称:如果(If)控制器名称,可以随意设置,甚至可以为空。
-
注释:可以随意设置,可以为空。
-
表达式(必须计算为true或false)
-
Expression(must evaluate to true or false):
表达式(值必须是true或false),也就是说,在右边文本框中输入的条件值必须是true 或 false,(默认情况下)-
Interpret Condition as Variable Expression?:
-
条件是否解释为变量表达式(需要使用__jexl3 or __groovy 表达式)
-
如果不选中,可直接写表达式
-
1==1
-
-
表达式结果为true,则登录接口执行
-
-
条件中为变量
- 很多情况下,需要根据用户变量或者上一个取样器的返回值来进行条件判断,觉得是否需要执行某一个的取样器。
-
-