1.For Earch控制器
1.1介绍
ForEach控制器一般和用户自定义变量一起使用,从用户自定义变量中读取一系列相关的变量。
ForEach控制器遍历读取不同的变量值,来控制其下的采样器或控制器执行一次或多次。
添加ForEach控制器组件操作:选中“线程组”右键 —> 添加 —> 逻辑控制器 —> ForEach控制器。
-
第一个参数:
- Input Variable Prefix:输入变量名的前缀,默认为一个空字符串作为前缀。
-
第二个参数:
- Start index for loop(exclusive):循环起始索引,需要注意的是,循环操作不包含此索引值,起始索引默认是从1开始,比如,填0时,其实是从1开始,若填2时,其实是从3开始算。
-
第三个参数:
- End index for loop(inclusive):循环结束索引。需要注意的是,循环操作包含此索引值,比如,此处填10,那么循环执行时,会循环执行到索引10
-
第四个参数:
- Output variable: 输出变量名,也就是此变量名,在后续的操作中可以直接引用。比如,此处填city,那么其他地方引用时可以用${city}
-
第五个参数:
- Add”_”before number: 勾选,变量名与索引之前有下划线"_",比如:city_1。不勾选,变量名与索引之前无下划线“—”,比如:city1。
2.2 示例
场景:搜索出商品列表,拿到商品id,然后将所有商品加入购物车,再删除加入的商品
2.2.1 搜索商品拿到id,json提取器提取需要的id
2.2.2 添加for each 逻辑控制器-调用获取的id
右键 —> 添加 —> 逻辑控制器 —> ForEach控制器
备注不填写for each循环控制器的起始值和结束值,默认从第一个到结束。
未填正常运行
2.IF控制器
2.1介绍
在使用Jmeter做性能测试、接口自动化测试时,需要针对不同的条件,进行不同的操作,此时,可以使用JMeter中的如果(If)控制器来实现。
1、控制器作用
JMeter中的如果(If)控制器,主要是用来控制它下面的测试元素是否执行。如果判断为真(True)那就执行,否(false)就不执行。
2、控制器添加
如果(If)控制器组件添加位置:选中“线程组”右键 —> 添加 —> 逻辑控制器 —> 如果(If)控制器
,如图所示:
3.参数说明
-
第一个参数:
- Expression (must evaluate to true or false) :表达式(结果值必须是true或false)。在右边文本框中输入的条件值必须是true 或 false。
-
第二个参数:
- Interpret Condition as Variable Expression?:默认勾选项,将条件解释为变量表达式(需要使用__jexl3 or __groovy 表达式)
-
第三个参数:
- Evaluate for all children?:条件作用与每个子节点,默认不勾选。仅在If Controller入口处判断一次
-
第四个参数:
- use status of last sample: 作用就是只有当上一个请求成功后,才会执行if控制器下的请求。
注意:
1、文本框上的黄色感叹号,就是建议采用默认的jexl3 or groovy 表达式,以提高性能。
2、if 控制器 只能作用于其下的子项
三、表达式说明
1、jexl3 or groovy 表达式
-
jexl3表达式格式
${__jexl2("${page}"=="baidu")}
-
groovy 表达式
${__groovy("${page}"=="baidu",)}
-
逻辑表达式说明
- ==
- 含义:是否等于
- 示例:如${__jexl3(${VAR}==1,)},判断${VAR}变量是否等于1。
- !=
- 含义:不等于
- 含义:如${__jexl3(${VAR}!=1,)},判断${VAR}变量是否不等于1。
- !
- 含义:非
- 示例:如${__jexl3(!(${VAR}!=2),)},对${VAR}的值不等于2,其判断为真,那么执行IF下的子项。
- &&
- 含义:并且
- 示例:如${__jexl3(${VAR}1 && "${name}" != "李四",)},也就是${VAR}1和表达式 "${name}" != "张四"均为真时,执行IF控制器下的子项。
- ||
- 含义:或
- 示例:如${__jexl3(${VAR}1 && "${name}" != "李四",)},也就是${VAR}1和表达式 "${name}" != "张四"其中一项为真时,执行IF控制器下的子项。
>=
- 含义:大于等于
- 示例:如${__jexl3(${count}>=15,)}。也就是${count}>=15,其判断为真,那么执行IF控制器下的子项。
- ==
注意:
如果判断表达式是字符串,此时,必须要用引号,变量都认为时字符串的形式,如:${__jexl3("${name}"=="成都",)},不能用${__jexl3(${name}=="成都",)}
2、函数助手调用
启动jmeter界面后,可以在JMeter的选项菜单中找到函数助手对话框(快捷键:Ctrl+Shift+F1),如下图所示:
3、JavaScript
表达式
采用JavaScript
其实就是在如果(IF)逻辑控制器中,取消勾选Interpret Condition as Variable Expression?
选项,如图所示:
-
数字表达式
highlighter- actionscript
${var}==1
-
字符串表达式
highlighter- bash
"${var}"=="字符串"
注意:如果
${var}
参数化变量取到的值本身就带双引号,则前边不需要加双引号。 -
布尔值表达式
highlighter- actionscript
${var}
注意:布尔值变量必须都是小写的
注意:${var}
表示参数化变量的引用。可以引用自定义变量,或者CSV文件读取到的数据,在或者是上一个请求中提取来的值。
四、采用默认函数形式(推荐)
采用默认函数形式,也就是采用默认的jexl3 or groovy 表达式,在此,用示例演示一下,if逻辑控制器的使用方法。
首先,添加用户定义变量,后续接口根据变量,判断执行哪一个请求