Jmeter 如何使用 if 控制器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jmeter 如何使用 if 控制器?相关的知识,希望对你有一定的参考价值。

参考技术A 踩了很多坑,免费的工具就是有很多问题,用的jmeter5.1的版本,if控制器中的条件怎么写就是无法进入到if条件内部的组件,后来现在了5.4的版本就好了

1. 请看我的截图,脚本写成如下的形式,这里的按照常理是判断条件为true才会执行if里面的部件,实际结果证明相反,要if条件为false才会执行里面的部件,这是个大大大的工具bug,等我有时间就去翻看一下源码.

Jmeter逻辑控制器: If控制器的解读

 

Jmeter官网其实有很详细的文档,点此跳转到官网,下面我来解读一下官网的文档,如有错误,欢迎指出。

一、官网解读

Name 在结果树中显示的名字。
Comments 备注。相当于代码中的注释。
Expression(must evaluate to true or false) 条件。默认使用JavaScript语言返回true或false。
Interpret Condition as Variable Expression? 默认选中。若不选中,会影响性能。
Evaluate for all children? 默认不选中。不选中则在进入If控制器时执行一次表达式。
  • If控制器使用户能控制是否执行其子节点。默认情况下,If控制器只在进入该控制器时执行一次,但用户可以选择执行每个子节点时都执行一次If控制器。

 

  • 如果勾选了Interpret Condition as Variable Expression?(默认是勾选的),那么在这种情况下有两种方式来填写exprssion:

  ① 使用等于true或false的变量。

      例如Jmeter内置变量 ${JMeterThread.last_sample_ok} 。如果上一个sample成功的话,那么就会返回true,否则就会返回false。(注意:这里的成功是包含断言的,最简单的判断是否成功可以在查看结果树里查看,绿色就是成功,红色就是失败)

      例如自定义的内置变量${VAR}。如果VAR的值就等于true,那么表达式的结果就是true,否则就是false。

  ② 使用函数__jexl3 或 __groovy。

      例如 ${__jexl3(${VAR} == 23,)},${__jexl3(${VAR} > 100,)},${__jexl3(${COUNT} < 10 && "${VAR}" == "abcd",)}  如果是字符串的话记得加上双引号。

 

   如果没有勾选Interpret Condition as Variable Expression? If控制器内部使用javascript来评估表达式,那么性能损失可能会非常大,从而使测试的可伸缩性降低。

  • 如果勾选了Evaluate for all children?那么在每个子节点执行前都会执行一次表达式。

     如果没有勾选Evaluate for all children?那么则在进入If控制器时执行一次表达式。(可能这样说也不是很懂,可以看下面的实践案例)

 

、实践

实践案例如下:

描述:在测试计划设置变量code的值为200。线程下添加If控制器,If控制器的子节点有:01登录,02首页。其中,01登录设置JSON提取器,提取返回结果中code的值并赋值给code。(如果登录成功则会赋值200)

① 若If控制器设置如下(没有勾选Evaluate for all children?):

技术图片

 

 则执行的流程图如下:

 技术图片

 ② 若If控制器设置如下(勾选了Evaluate for all children?):

 技术图片

 则执行的流程图如下:

技术图片

以上是关于Jmeter 如何使用 if 控制器?的主要内容,如果未能解决你的问题,请参考以下文章

jmeter使用详解

jmeter使用详解

jmeter控制器--if控制器

Jmeter if控制器的使用 - 真正实现3:2的业务

软件测试攻略(十六):Jmeter进阶_if控制器&正则表达式提取器

jmeter里如何生成逐渐加一的数