我有一个脚本,其中有一些if控制器。我试图添加第四个If控制器,如果三个预期值均未返回,则将触发脚本失败。这是说三个期望值之一是无效的。
首先,我有一个用户定义的变量,如下所示:
testTool= ${__P(testTool,APPLES)}
2nd,我有这3个If控制器,它们具有以下表达式:
${__groovy(vars.get("testTool").toUpperCase().equals("APPLES"))}
${__groovy(vars.get("testTool").toUpperCase().equals("BANANAS"))}
${__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。我究竟做错了什么?如果控制器已选中“ 解释为变量表达式的条件”,则所有操作。
答案 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是更简单的选择,它是最佳解决方案。
${testTool}
作为“切换值” 将4个请求作为交换控制器的子代,并将其命名为:
APPLES
BANANAS
PEACHES
DEFAULT
因此,如果${testTool}
变量值将是APPLES
-将执行APPLES
采样器,如果${testTool}
变量值将是BANANAS
-{{ 1}}采样器将被执行,等等。
如果BANANAS
与其他任何子级都不匹配-JMeter将运行${testTool}
采样器
有关详细信息,请参见Selection Statements in JMeter Made Easy指南。