可以控制其下面的子/后代元素是否执行;如果为 true 则执行;如果为 false 则都不执行
选择线程组右键 >>> 添加 >>> 逻辑控制器 >>> IF 控制器(If Controller)
(1)、Expression (must evaluate to true or false) :表达式(值必须是true或false),也就是说,在右边文本框中输入的条件值必须是true 或 false,(默认情况下)
(2)、Use status of last sample:快捷方式,取上一次取样器结果是否通过,会引用一个变量,点击后,会在 Expression 框中生成:${JMeterThread.last_sample_ok}
(3)、Interpret Condition as Variable Expression?:默认勾选项,将条件解释为变量表达式(需要使用__jexl3 or __groovy 表达式)【选中这一项时表示:判断变量值是否等于字符串true(不区分大小写)】
不勾选:直接输入我们需要判断的表达式即可,判断表达式为真时,执行if控制器下的请求,例如“1!=2”,则一定会执行下面的http请求
勾选:这个时候,expression中不能直接填写条件表达式,需要借助函数将条件表达式计算为true/false,可以借助的函数有_jexl3和_groovy
(4)、Evaluate for all children?:条件作用于每个子项,执行每个子项,都会判断一次条件。一般不勾选,条件一般只判断一次即可
注:
文本框上的黄色感叹号,就是提示你,建议采用__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式
IF 控制器 只能作用于其下的子项
jexl全称:Jakarta Commons Jexl,是一种表达式语言(Java Expression Language)解释器
在if逻辑控制器的Expression中不能直接填写条件表达式,需要借助函数将条件表达式计算为true/false,可以借助的函数有__jexl3和__groovy函数。
A:变量,比如 ${flag},如果值为 true,则认为通过,否则认为是 fase
B:函数,条件判断同时支持 js、groovy、jexl3 三种脚本语言,出于性能原因,不建议使用 js
js 语法举例:KaTeX parse error: Expected '}', got 'EOF' at end of input: …_\_javaScript("{count}" ==“1"”)}
groovy 语法举例:${__groovy(vars.get(“count”) !=“1”)}
jexl3 语法举例:KaTeX parse error: Expected '}', got 'EOF' at end of input: {\_\_jexl3({count}< 10)}
(1)、测试计划右键 <<< 添加 <<< 线程(用户)<<< 线程组
(2)、线程组右键 <<< 添加 <<< 配置元件 <<< 用户定义的变量
count : 1
flag : true
(3)、线程组右键 <<< 添加 <<< 逻辑控制器 <<< IF 控制器
${flag}
(4)、IF 控制器右键 <<< 添加 <<< 取样器 <<< 调试取样器
(5)、线程组右键 <<< 添加 <<< 监听器 <<< 查看结果树
(6)、点击启动,点击查看结果树,查看调试取样器是否执行
如图,IF 控制器 返回的是 true,所以会执行 调试取样器
(7)、修改 用户定义的变量 组件,将 flag 参数修改为 false
(8)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行
如图,IF 控制器 返回的是 false,所以不会执行 调试取样器
(9)、修改 用户定义的变量 组件,将 flag 参数修改为 aaaaa
(10)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行
如图,IF 控制器 返回的是 false,所以不会执行 调试取样器
用户定义的变量 组件中的 flag 值只要不是 true,则都为 false
(1)、修改 用户定义的变量 组件,将 flag 参数修改为 true
(2)、修改 IF 控制器,使用 groovy 语法
// 两种写法选一种即可
${__groovy(vars.get("count")=="1")}
${__groovy("${count}"=="1")}
(3)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行
IF 控制器 中的 ${__groovy(vars.get("count")=="1")} 返回值为 true,所以 调试取样器 会执行
(4)、修改 用户定义的变量 组件,将 count 参数修改为 2
(5)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行
IF 控制器 中的 ${__groovy(vars.get("count")=="1")} 返回值为 false,count 值为 2,所以 调试取样器 不会执行
(1)、修改 用户定义的变量 组件,将 count 参数修改为 1
(2)、修改 IF 控制器,使用 javaScript 语法
${__javaScript("${count}"=="1")}
(3)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行
IF 控制器 中的 ${__javaScript("${count}"=="1")} 返回值为 true,所以 调试取样器 会执行
(4)、修改 用户定义的变量 组件,将 count 参数修改为 2
(5)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行
IF 控制器 中的 ${__javaScript("${count}"=="1")} 返回值为 false,count 值为 2,所以 调试取样器 不会执行
(1)、修改 用户定义的变量 组件,将 count 参数修改为 1
(2)、修改 IF 控制器,使用 jexl3 语法
// 四种写法,选一种即可
${__jexl3(${count}=="1")}
//${__jexl3(${count}==1)}
//${__jexl3(${count}<10)}
//${__jexl3("${count}"=="1")}
(3)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行
IF 控制器 中的 ${__jexl3(${count}=="1")} 返回值为 true,所以 调试取样器 会执行
(4)、修改 用户定义的变量 组件,将 count 参数修改为 2
(5)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行
IF 控制器 中的 ${__jexl3(${count}=="1")} 返回值 为 false,count 值为 2,所以 调试取样器 不会执行