Jmeter-逻辑控制器If Controller的实例运用
一、If Controller概述
Expression (must evaluate to true or false) :表达式(值必须是true或false),也就是说,在右边文本框中输入的条件值必须是true 或 false,(默认情况下)
Interpret Condition as Variable Expression?:默认勾选项,将条件解释为变量表达式(需要使用__jexl3 or __groovy 表达式,可用函数助手生成)
Evaluate for all children?:条件作用于每个子项(即意味着它的每个子元素在运行前都会运行一次 if 控制器里面的条件表达式,看看是否还是 true,是的话就可以运行,false 就不运行)
注:
1、文本框上的黄色感叹号,就是提示你,建议采用__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式。
2、if 控制器 只能作用于其下的子项
二、If Controller的实例运用
(一)直接输入条件
如图,去掉 “Interpret Condition as Variable Expression?” 前面复选框,直接输入条件 1==1。if控制器里面的“按编号筛选列表-2106000014”的取样器将被执行。
执行结果如下图:
(二)默认用法,采用__jexl3 or __groovy 表达式
案例描述:
添加自定义的变量值,利用ForEach Controller进行读取此变量值,然后将读取的变量值保存到设定的变量中;当变量取值符合IF Controller中设定的条件时,则执行其下的业务请求并监控
业务说明:
以“版单管理列表”接口为例
> 添加用户定义的变量code(3个:2106000007,2106000008,2106000009)
> 用ForEach控制器读取变量codelike
> 接口入参prototypeCodeLike使用此变量值
> if控制器中判断codelike等于2106000007时,执行控制器下面的取样器
操作步骤:
1、目录结构
2、用户定义的变量
ForEach根据输入变量前缀来循环遍历,格式满足{aa_1,aa_2,aa_3}的格式,注意 变量后是以_带数字分隔的
3、ForEach控制器
4、在ForEach Controller下添加版单管理列表接口取样器
取样器的请求中配置引用forEach读取的参数 codelike
5、在ForEach Controller之下添加IF Controller,设置判断真假的求值函数
${__groovy(${codelike}==2106000007,)} 表示ForEach Controller中读取的变量值为”2106000007″时,才会执行IF Controller之下的请求
6、执行结果
【版料管理列表-${codelike}】接口取样器,执行满足forEach设定读取添加的所有变量值,当if为true时,则执行if控制器下的取样器【if为true时,执行版单管理列表-${codelike}】,所以最终执行结果如图
(三)Evaluate for all children? 的用法
勾选了之后意味着它的每个子元素在运行前都会运行一次 if 控制器里面的条件表达式,看看是否还是 true,是的话就可以运行,false 就不运行。演示如下:
1、勾选上,使条件作用于每个子项
2、添加JSR223 后置处理器或前置处理器,将code_1的值变为123
3、执行结果
由于变量code_1的值变了,导致不符合if条件${__groovy(${codelike}==2106000007,)},所以便不会执行if控制器下的【版单管理列表-应用于所有子项】取样器
附上去掉勾选的执行结果