• jmeter(21)逻辑控制器 之 if控制器


    一. 如果(If)控制器

    实践操作可参考博文:https://testerhome.com/topics/12300 

    使用if控制器有两种方式:
    1.不勾选“interpret condition as variable expression”
    直接输入我们需要判断的表达式即可判断表达式为真时,执行if控制器下的请求,例如“1!=2”,则一定会执行下面的http请求

    2.勾选“interpret condition as variable expression”
    这时expression中不能直接填写条件表达式,需要借助函数将条件表达式计算为true/false,可以借助的函数有_jexl3和_groovy,例如:直接填写${modelId}==5,是不能识别的
    步骤a.借助函数助手,生成表达式

    步骤b.把生成的表达式,写在if控制器中

    c.然后if控制器就可以读取到判断内容啦,当条件为true时,执行下面的请求。   参考原文链接:https://blog.csdn.net/haiou24/article/details/83545442

    给大家分享下Jmeter中 如果(if)控制的使用和应用

    如下图:线程组 > 添加 > 逻辑控制器 > 如果 (if) 控制器

    Expression (must evaluate to true or false) :表达式(值必须是true或false),也就是说,在右边文本框中输入的条件值必须是true 或 false,(默认情况下)

    Interpret Condition as Variable Expression?默认勾选项,将条件解释为变量表达式(需要使用__jexl3 or __groovy 表达式)

    Evaluate for all children?条件作用于每个子项(具体理解见后面的列子说明)

    注:

    1、文本框上的黄色感叹号,就是提示你,建议采用__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式。

    2、if 控制器 只能作用于其下的子项

    一、默认用法,采用__jexl3 or __groovy 表达式

    如下图,if 控制器 下 有一个 访问百度首页 的取样器,只有if条件满足时,才会执行该取样器。采用默认方式,将条件1==1,放入 __jexl3表达式中。
    ${__jexl3(1=1,)}
    Tools--函数助手--

     如果不知道表达式如何使用,可使用Jmeter 的函数助手,如下:

     二、直接输入条件

    如下图,去掉 “Interpret Condition as Variable Expression?” 前面复选框,就可以直接输入条件 1==1。访问百度首页的取样器将被执行。

     三、条件中使用变量

    很多情况下,需要根据用户变量或者上一个取样器的返回值来进行条件判断,觉得是否需要执行某一个的取样器。这句话很启发!!
    适用于测试的各个场景,比如if控制器判断上个接口是审核接口响应返回失败,就执行放在if控制器下的提交接口以便再试一次提交,然后if控制器再次如果审核成功就继续往下走流程。。

    如下,新增一个用户变量:ischildren。条件:ischildren 的值为 y 的时候,才执行 访问百度首页 的取样器。

     

     或者可以用表达式:${__jexl3("${ischildren}"=="y",)}。

    四、Evaluate for all children? 的用法

    在 上面了解了条件中如何使用变量,那么如果 if 控制器下的取样器执行后,改变了该变量的值,if 控制器下其后的取样器还会被执行吗?看看下面的列子:

    场景:上面例子中,if 控制器下,有3个取样器,变量 ischildren 的初始值为y,if 控制器的条件为:${__jexl3("${ischildren}"=="y",)}。

    开始满足条件,那么应该执行 1访问百度首页 、2访问百度新闻页、3访问百度贴吧 3个取样器,

    但是 2访问百度新闻页 执行后,将ischildren 的值变了 n,已经不能满足 "${ischildren}"=="y" 条件。

    所以 访问百度贴吧 这个取样器不会被执行。

    如果这个时候,去掉  Evaluate for all children? 的勾选,会发生什么呢,大家可以自己动手试试。
    猜想:只作用于第一个请求???



    补充:

    条件有:

    ==  等于,如 1==1 或 ${__jexl3(1==1,)}

    > 、< 大于 小于,如 2>1,1<2,或 ${__jexl3(2>1,)}    

    >=、<= 大于等于  小于等于,如 2>=1 ,或 ${__jexl3(2>=1,)} 

    !=、!不等于,非,如 "y"!="n",非 则取 != 的反值

    多条件可用:|| 或,&& 和,如:2<5 && 2>1,${__jexl3(2<5 && 2>1,)}

    另外,如果时字符串必须要用引号,变量都认为时字符串的形式,如:${__jexl3("${ischildren}"=="y",)}

     参考博文:https://www.cnblogs.com/sandymonk/p/11506222.html
    我觉得博主写的很棒!赞一个!很清晰。

  • 相关阅读:
    PAT 甲级 1027 Colors in Mars
    PAT 甲级 1026 Table Tennis(模拟)
    PAT 甲级 1025 PAT Ranking
    PAT 甲级 1024 Palindromic Number
    PAT 甲级 1023 Have Fun with Numbers
    PAT 甲级 1021 Deepest Root (并查集,树的遍历)
    Java实现 蓝桥杯VIP 算法训练 无权最长链
    Java实现 蓝桥杯VIP 算法训练 无权最长链
    Java实现 蓝桥杯 算法提高 抽卡游戏
    Java实现 蓝桥杯 算法提高 抽卡游戏
  • 原文地址:https://www.cnblogs.com/yiyaxuan/p/12390585.html
Copyright © 2020-2023  润新知