??存在一些使用场景,比如:一个测试场景中,包含多个请求,当上一个请求的结果不符合要求,就不需要执行下一个请求。(例如:某产品的功能,质量任务执行,如果当现在的任务状态是执行中,就不用再执行下一个请求了)
??如下是JMeter官网对IF控制器的介绍,
??IF条件判断,IF控制器可以在循环的基础上加判断,当条件为True的时候执行下一个请求。反之,当条件为false的时候,就不执行下一个请求。
??在线程组中或相关控制器中,选中“线程组”右键 —> 添加 —> 逻辑控制器 —> 如果(If)控制器,如图所示:
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 控制器 只能作用于其下的子项。
jexl3表达式格式
${__jexl3(条件表达式)}
groovy 表达式
${__groovy(条件表达式}
逻辑表达式说明
==
含义:是否等于
示例:如KaTeX parse error: Expected group after '_' at position 2: {_?_jexl3({VAR}==1,)},判断${VAR}变量是否等于1。
!=
含义:不等于
含义:如KaTeX parse error: Expected group after '_' at position 2: {_?_jexl3({VAR}!=1,)},判断${VAR}变量是否不等于1。
!
含义:非
示例:如KaTeX parse error: Expected group after '_' at position 2: {_?_jexl3(!({VAR}!=2),)},对${VAR}的值不等于2,其判断为真,那么执行IF下的子项。
&&
含义:并且
示例:如KaTeX parse error: Expected group after '_' at position 2: {_?_jexl3({VAR}1 && "KaTeX parse error: Expected 'EOF', got '}' at position 18: …ame}" != "李四",)}?,也就是{VAR}1和表达式 “${name}” != "张四"均为真时,执行IF控制器下的子项。
||
含义:或
示例:如KaTeX parse error: Expected group after '_' at position 2: {_?_jexl3({VAR}1 && "KaTeX parse error: Expected 'EOF', got '}' at position 18: …ame}" != "李四",)}?,也就是{VAR}1和表达式 “${name}” != "张四"其中一项为真时,执行IF控制器下的子项。
>=
含义:大于等于
示例:如${__jexl3(${count}>=15,)}。也就是${count}>=15,其判断为真,那么执行IF控制器下的子项。
注意:
如果判断表达式是字符串,此时,必须要用引号,变量都认为时字符串的形式,如:
${__jexl3("${name}"=="成都",)},不能用${__jexl3(${name}=="成都",)}
??启动jmeter界面后,可以在JMeter的选项菜单中找到函数助手对话框,如下图所示:
应用场景
??在实际项目测试油这样一个场景,质量任务执行,同一个任务,如果任务的状态在运行中,再次进行任务提交的话就不会提交。
重点
??在实际应用IF控制器的时候,需要确定IF条件的判断结果。
如下是测试产品过程中IF条件的判断标志。
实现
通过if控制器进行判断是否需要执行任务,其中data就是上图所示得值即“false”。
${__jexl3("${data}"!="true",)}