JMeter-如果(if)控制器

目录

一、如果(if)控制器参数说明

1、定义

2、参数实现

​编辑

(1)Expression (must evaluate to true or false)

(2)Use status of last sample

(3)Interpret Condition as Variable Expression?

(4)Evaluate for all children?

二、测试用例设计

1、脚本实现

(1)添加线程组

(2)添加用户定义的变量

(3)添加如果(if)控制器

(4)添加调试取样器

(5)添加结果树

(6)启动查看结果树

(7)修改用户定义的变量1

(8)重新启动查看结果树1

(9)修改用户定义的变量2

(10)重新启动查看结果树2

2、groovy 写法

(1)修改用户定义的变量1

(2)修改如果(if)控制器

(3)重新启动查看结果树1

(4)修改用户定义的变量2

(5)重新启动查看结果树2

3、javaScript 写法

(1)修改用户定义的变量1

​编辑(2)修改如果(if)控制器

(3)重新启动查看结果树1

(4)修改用户定义的变量2

(5)重新启动查看结果树2

4、jexl3 写法

(1)修改用户定义的变量1

(2)修改如果(if)控制器

(3)重新启动查看结果树1

(4)修改用户定义的变量2

(5)重新启动查看结果树2


一、如果(if)控制器参数说明

1、定义


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

2、参数实现

线程组右键 -> 添加 -> 逻辑控制器 -> 如果(if)控制器

(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 或者 __groovy 表达式)【选中这一项时表示:判断变量值是否等于字符串true(不区分大小写)】

  • 不勾选:直接输入我们需要判断的表达式即可,判断表达式为真时,执行if控制器下的请求,例如“1!=2”,则一定会执行下面的http请求
  • 勾选:这个时候,expression中不能直接填写条件表达式,需要借助函数将条件表达式计算为true/false,可以借助的函数有_jexl3和_groovy

(4)Evaluate for all children?

条件作用于每个子项,执行每个子项,都会判断一次条件,一般不勾选,条件一般只判断一次即可

注意:

(1)文本框上的黄色感叹号,就是提示我们,建议采用__jexl3 or __groovy 表达式,以提高性能-默认的方式

(2)IF 控制器 只能作用于其下的子项

(3)jexl全称:Jakarta Commons Jexl,是一种表达式语言(Java Expression Language)解释器

如果(if)控制器的Expression中不能直接填写条件表达式,需要借助函数将条件表达式计算为true/false,可以借助的函数有__jexl3和__groovy函数

  • 变量,比如 ${flag},如果值为 true,则认为通过,否则认为是 fase
  • 函数,条件判断同时支持 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、脚本实现

(1)添加线程组

测试计划右键 -> 添加 -> 线程(用户)-> 线程组

(2)添加用户定义的变量

线程组右键 -> 添加 -> 配置元件 -> 用户定义的变量

count : 1

flag : true

(3)添加如果(if)控制器

线程组右键 -> 添加 -> 逻辑控制器 -> 如果(if)控制器

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

(4)添加调试取样器

IF 控制器右键 -> 添加 -> 取样器 -> 调试取样器

(5)添加结果树

线程组右键 -> 添加 -> 监听器 -> 查看结果树

(6)启动查看结果树

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

(7)修改用户定义的变量1

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

(8)重新启动查看结果树1

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

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

(9)修改用户定义的变量2

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

(10)重新启动查看结果树2

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

如图,如果(if)控制器 返回的是 false,所以不会执行 调试取样器,用户定义的变量 组件中的 flag 值只要不是 true,则都为 false
 

2、groovy 写法

(1)修改用户定义的变量1

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

(2)修改如果(if)控制器

修改 IF 控制器,使用 groovy 语法,如图:

// 两种写法选一种即可

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

这里的写法只能写一行,才生效


(3)重新启动查看结果树1

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

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

(4)修改用户定义的变量2

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

(5)重新启动查看结果树2

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

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

3、javaScript 写法

(1)修改用户定义的变量1

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


(2)修改如果(if)控制器

修改 IF 控制器,使用 javaScript 语法

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


(3)重新启动查看结果树1

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

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

(4)修改用户定义的变量2

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

(5)重新启动查看结果树2

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

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

4、jexl3 写法

(1)修改用户定义的变量1

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


(2)修改如果(if)控制器

修改 如果(if) 控制器,使用 jexl3 语法

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

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


(3)重新启动查看结果树1

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

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

(4)修改用户定义的变量2

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

(5)重新启动查看结果树2

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JMeter中的If控制器可以用于根据某些条件来控制测试计划中的执行流程。如果条件为真,则执行If控制器中的所有子元素,否则跳过它们。 以下是If控制器的使用步骤: 1. 添加If控制器:在测试计划中右键单击线程组,选择添加 -> 逻辑控制器 -> If控制器。 2. 添加条件:在If控制器中添加一个条件,可以使用函数、变量或表达式来定义条件。 3. 添加子元素:如果条件为真,则执行If控制器中的所有子元素。因此,在If控制器中添加需要执行的子元素,如HTTP请求、数据库请求等。 4. 配置条件:在条件中输入函数、变量或表达式,以便JMeter可以根据条件来控制执行流程。 5. 运行测试计划:运行测试计划并观察执行流程是否符合预期。 示例: 假设我们需要在测试计划中添加一个If控制器,以便在响应时间大于5秒时暂停5秒钟。可以按照以下步骤操作: 1. 添加If控制器:右键单击线程组,选择添加 -> 逻辑控制器 -> If控制器。 2. 添加条件:在条件中输入${__jexl3(${JMeterThread.last_sample_ok} && ${JMeterThread.last_sample_time}>5000)}。此条件使用JEXL函数和变量来检查最后一个样本的响应时间是否大于5秒。 3. 添加子元素:在If控制器中添加一个定时器,设置时间为5000毫秒。 4. 配置条件:在条件中输入函数、变量或表达式。 5. 运行测试计划:运行测试计划并观察执行流程是否符合预期。如果响应时间大于5秒,则会暂停5秒钟。否则,不会执行暂停操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值