JMeter:逻辑控制器_While控制器(While Controller)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMeter:逻辑控制器_While控制器(While Controller)相关的知识,希望对你有一定的参考价值。
参考技术A While控制器 将运行其子代,直到条件为“ false ”。可能的条件值:
条件可以是最终计算为字符串“ false ”的任何变量或函数。这允许根据需要使用 __jexl3 , __groovy 函数,属性或变量。
1、参数为空
当while参数设置为空,此时其子节点下 最后一个 节点运行失败,才会停止;否则,会一直循环下去(哪怕只有一个失败也不行,需要全部都失败了,才退出)
设置某个请求地址不存在,再次执行,发现失败后,还是会一直在循环执行。
设置所有的请求地址,无法请求,所有请求失败后,退出循环执行
2、参数为LAST
当参数设置为LAST时,如果while controller的上一个节点运行失败,则不再执行while controller;否则继续执行,与参数为空的情况一致
修改上一个节点【查询不同状态订单all】请求失败,再执行,While控制器里面的不会再请求
修改上一个节点【查询不同状态订单all】请求成功,执行,与参数为空的情况一致
3、参数为表达式
当参数为表达式时(需要经过__jexl3函数进行转换,可以使用函数助手生成表达式),如果表达式的结果为true,则执行while controller;反之则不执行,所以在参数中也可以直接输入true或者false来控制是否执行while controller
例如:
定义环境变量
使用表达式判断,status==all时,while执行
使用表达式判断,status!=all时,while执行
JMeter:逻辑控制器_If控制器(If Controller)
参考技术A If控制器 允许用户控制其下的测试元素(其子元素)是否运行。If Controller的主要用途是控制JMeter执行脚本流程。这基本上意味着只有在某个条件为真时才能运行采样器。
添加if控制器: 线程组 > 添加 > 逻辑控制器 > 如果 (if) 控制器
Expression (must evaluate to true or false) : 表达式(值必须是true或false),也就是说,在右边文本框中输入的条件值必须是true 或 false,(默认情况下)
Interpret Condition as Variable Expression?: 默认勾选项,将条件解释为变量表达式(需要使用__jexl3 or __groovy 表达式)【选中这一项时表示:判断变量值是否等于字符串true(不区分大小写)】
Evaluate for all children?: 条件作用于每个子项
注:
1、文本框上的黄色感叹号,就是提示你,建议采用__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式。
2、if 控制器 只能作用于其下的子项
3、jexl全称:Jakarta Commons Jexl,是一种表达式语言(Java Expression Language)解释器。
在if逻辑控制器的Expression中不能直接填写条件表达式,需要借助函数将条件表达式计算为true/false, 可以借助的函数有__jexl3和__groovy函数。
一、默认用法,采用__jexl3 or __groovy 表达式,控制测试脚本执行流程
如下图,if 控制器下两个访问注册页面的取样器,只有if条件满足时,才会执行该取样器。采用默认方式,将条件1==1,放入 __jexl3表达式中。
假设我们有一个带有两个请求采样器的基本脚本:第一个请求采样器位于If控制器之前一步,而第二个采样器位于其中。让我们添加最简单的条件,以验证执行工作流是否按预期工作:
执行请求后,结果
两个请求都被触发,因为我们的If Controller条件(1 == 1)被返回为true。让我们尝试将其设为false并再次验证脚本执行:
修改f Controller条件(1 == 2)
由于我们的新条件(1 == 2),这个位于If Controller内部的请求没有按预期执行,这显然返回为false。
这是If Controller如何允许您控制脚本执行流程的最简单示例。要防止执行脚本的某个部分,请将其嵌套在If Controller下并将条件设置为false。
注: 如果不知道表达式如何使用,可使用Jmeter 的函数助手,如下:
2、条件中使用变量,注意使用的条件语法
在创建条件时,应该验证它们的语法,因为很容易犯错并不容易捕获。让我们创建一个用户定义的变量,我们可以在测试条件中进一步使用它:
使用函数生成的表达式
$ channerlCode变量应该包含'应用宝'字符串,我们可能希望创建的线程组将运行我们的两个请求。我们来看看这个:
if控制器里面的请求,没有执行。那是因为我们的条件语法错误。这是If Controller最常见的错误之一。如果要比较两个字符串,则必须在引号中指定它们(即使对于变量也应使用引号)。让我们尝试修复它并再次运行脚本:
通过上面的脚本场景,说明要注意检查条件语法以防止脚本执行失效。
以上是关于JMeter:逻辑控制器_While控制器(While Controller)的主要内容,如果未能解决你的问题,请参考以下文章
JMeter:逻辑控制器_If控制器(If Controller)
JMeter:逻辑控制器_循环控制器(Loop Controller)
JMeter:逻辑控制器_模块控制器(Module Controller)