【P29】JMeter IF 控制器(If Controller)

文章目录

    • 一、IF 控制器(If Controller)参数说明
    • 二、测试计划设计
      • 2.1、groovy 写法
      • 2.2、javaScript 写法
      • 2.3、jexl3 写法


一、IF 控制器(If Controller)参数说明

可以控制其下面的子/后代元素是否执行;如果为 true 则执行;如果为 false 则都不执行

选择线程组右键 >>> 添加 >>> 逻辑控制器 >>> IF 控制器(If Controller)

【P29】JMeter IF 控制器(If Controller)_第1张图片

(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)、测试计划右键 <<< 添加 <<< 线程(用户)<<< 线程组

【P29】JMeter IF 控制器(If Controller)_第2张图片

(2)、线程组右键 <<< 添加 <<< 配置元件 <<< 用户定义的变量

【P29】JMeter IF 控制器(If Controller)_第3张图片

  • count : 1

  • flag : true

(3)、线程组右键 <<< 添加 <<< 逻辑控制器 <<< IF 控制器

【P29】JMeter IF 控制器(If Controller)_第4张图片

  • 勾选 Interpret Condition as Variable Expression?
${flag}

(4)、IF 控制器右键 <<< 添加 <<< 取样器 <<< 调试取样器

【P29】JMeter IF 控制器(If Controller)_第5张图片

(5)、线程组右键 <<< 添加 <<< 监听器 <<< 查看结果树

(6)、点击启动,点击查看结果树,查看调试取样器是否执行

【P29】JMeter IF 控制器(If Controller)_第6张图片

如图,IF 控制器 返回的是 true,所以会执行 调试取样器

(7)、修改 用户定义的变量 组件,将 flag 参数修改为 false

【P29】JMeter IF 控制器(If Controller)_第7张图片

(8)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行

【P29】JMeter IF 控制器(If Controller)_第8张图片

如图,IF 控制器 返回的是 false,所以不会执行 调试取样器

(9)、修改 用户定义的变量 组件,将 flag 参数修改为 aaaaa

【P29】JMeter IF 控制器(If Controller)_第9张图片

(10)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行

【P29】JMeter IF 控制器(If Controller)_第10张图片

如图,IF 控制器 返回的是 false,所以不会执行 调试取样器

用户定义的变量 组件中的 flag 值只要不是 true,则都为 false

2.1、groovy 写法

(1)、修改 用户定义的变量 组件,将 flag 参数修改为 true

【P29】JMeter IF 控制器(If Controller)_第11张图片

(2)、修改 IF 控制器,使用 groovy 语法

【P29】JMeter IF 控制器(If Controller)_第12张图片

// 两种写法选一种即可

${__groovy(vars.get("count")=="1")}
${__groovy("${count}"=="1")}

(3)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行

【P29】JMeter IF 控制器(If Controller)_第13张图片

IF 控制器 中的 ${__groovy(vars.get("count")=="1")} 返回值为 true,所以 调试取样器 会执行

(4)、修改 用户定义的变量 组件,将 count 参数修改为 2

【P29】JMeter IF 控制器(If Controller)_第14张图片

(5)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行

【P29】JMeter IF 控制器(If Controller)_第15张图片

IF 控制器 中的 ${__groovy(vars.get("count")=="1")} 返回值为 false,count 值为 2,所以 调试取样器 不会执行

2.2、javaScript 写法

(1)、修改 用户定义的变量 组件,将 count 参数修改为 1

【P29】JMeter IF 控制器(If Controller)_第16张图片

  • count : 1

(2)、修改 IF 控制器,使用 javaScript 语法

【P29】JMeter IF 控制器(If Controller)_第17张图片

${__javaScript("${count}"=="1")}

(3)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行

【P29】JMeter IF 控制器(If Controller)_第18张图片

IF 控制器 中的 ${__javaScript("${count}"=="1")} 返回值为 true,所以 调试取样器 会执行

(4)、修改 用户定义的变量 组件,将 count 参数修改为 2

【P29】JMeter IF 控制器(If Controller)_第19张图片

(5)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行

【P29】JMeter IF 控制器(If Controller)_第20张图片

IF 控制器 中的 ${__javaScript("${count}"=="1")} 返回值为 false,count 值为 2,所以 调试取样器 不会执行

2.3、jexl3 写法

(1)、修改 用户定义的变量 组件,将 count 参数修改为 1

【P29】JMeter IF 控制器(If Controller)_第21张图片

  • count : 1

(2)、修改 IF 控制器,使用 jexl3 语法

【P29】JMeter IF 控制器(If Controller)_第22张图片

// 四种写法,选一种即可

${__jexl3(${count}=="1")}
//${__jexl3(${count}==1)}
//${__jexl3(${count}<10)}
//${__jexl3("${count}"=="1")}

(3)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行

【P29】JMeter IF 控制器(If Controller)_第23张图片

IF 控制器 中的 ${__jexl3(${count}=="1")} 返回值为 true,所以 调试取样器 会执行

(4)、修改 用户定义的变量 组件,将 count 参数修改为 2

【P29】JMeter IF 控制器(If Controller)_第24张图片

(5)、点击清除全部,点击启动,点击查看结果树,查看调试取样器是否执行

【P29】JMeter IF 控制器(If Controller)_第25张图片

IF 控制器 中的 ${__jexl3(${count}=="1")} 返回值 为 false,count 值为 2,所以 调试取样器 不会执行

你可能感兴趣的:(Jmeter,jmeter,javascript,前端)