JMeter If Controller使用groovy和Or无法正常工作

时间:2018-08-06 14:57:56

标签: jmeter

我有一个脚本,其中有一些if控制器。我试图添加第四个If控制器,如果三个预期值均未返回,则将触发脚本失败。这是说三个期望值之一是无效的。

首先,我有一个用户定义的变量,如下所示:

testTool= ${__P(testTool,APPLES)}

2nd,我有这3个If控制器,它们具有以下表达式:

  1. ${__groovy(vars.get("testTool").toUpperCase().equals("APPLES"))}
  2. ${__groovy(vars.get("testTool").toUpperCase().equals("BANANAS"))}
  3. ${__groovy(vars.get("testTool").toUpperCase().equals("PEACHES"))}

如果testTool的值不是3个期望值之一,则应该触发第4个If。它的表情看起来像这样:

>    ${__groovy( (vars.get("testTool").toUpperCase().equals("APPLES") == false || 
>    vars.get("testTool").toUpperCase().equals("BANANAS") == false ||
>    vars.get("testTool").toUpperCase().equals("PEACHES") == false)) }

我也尝试过这种方式:

>  ${__groovy((!vars.get("testTool").toUpperCase().equals("APPLES") || 
>  !vars.get("testTool").toUpperCase().equals("BANANAS") || 
>  !vars.get("testTool").toUpperCase().equals("PEACHES")),)}

某种程度上说APPLES是无效的testTool。我究竟做错了什么?如果控制器已选中“ 解释为变量表达式的条件”,则所有操作。

2 个答案:

答案 0 :(得分:0)

在if控制器中使用以下条件

 ${__groovy(!(vars.get("testTool").toUpperCase().equals("APPLES"))||!(vars.get("testTool").toUpperCase().equals("BANANAS"))||!(vars.get("testTool").toUpperCase().equals("PEACHES")))}

请告诉我是否有帮助

答案 1 :(得分:0)

您应该使用&&运算符而不是||,有关详细说明和更多信息,请参见Groovy Logical Operators

您的第四个表达式需要修改为:

${__groovy(!(vars.get("testTool").toUpperCase().equals("APPLES")) && !(vars.get("testTool").toUpperCase().equals("BANANAS")) && !(vars.get("testTool").toUpperCase().equals("PEACHES")))}

从实现尤其是性能的角度来看,使用Switch Controller是更简单的选择,它是最佳解决方案。

  • 将Switch Controller添加到您的测试计划中
  • 使用${testTool}作为“切换值”
  • 将4个请求作为交换控制器的子代,并将其命名为:

    • APPLES
    • BANANAS
    • PEACHES
    • DEFAULT

    因此,如果${testTool}变量值将是APPLES-将执行APPLES采样器,如果${testTool}变量值将是BANANAS-{{ 1}}采样器将被执行,等等。

    如果BANANAS与其他任何子级都不匹配-JMeter将运行${testTool}采样器

    JMeter Switch Controller

有关详细信息,请参见Selection Statements in JMeter Made Easy指南。