Jmeter:无法在If Controller

时间:2018-10-03 15:08:38

标签: if-statement jmeter

回答问题

亲爱的读者,请根据需要,进一步进行阅读。但最重要的是,我愿意提供Dmitri的答案,这样其他人就不会浪费时间玩Jmeter If Controller。

  

如果您希望在If Controller中使用多个条件语句,   特别是如果您要检查变量是否等于某些字符串,   不要使用$ {__ javaScript()}功能!!! Dmitri建议改用   $ {__ groovy()}函数,该函数在我的情况下有效。正确的语法   下面。注意打开括号,逗号位置和大括号:

     

$ {__ groovy((vars.get('yourVariable')。equals('someString')&&   vars.get('yourAnotherVariable')。equals('someOtherString')),)}

添加

如果您想节省时间以使If Controller在多个条件下工作,请始终取消选中将条件解释为变量表达式复选框。否则,您将不得不使用那些__javaScript,__ groovy或其他函数,因为无法了解它们应该如何工作以及为什么它们不能解析为true或false(在这种情况下,日志文件始终是干净的) 。这是您在没有这些“功能”帮助的情况下要做的。请在下面查看我的示例

${yourVariable} != 'not_found' && ${youAnotherVariable_matchNr} == 1 

就是这样,不需要使用任何功能。

enter image description here


初始问题

Jmeter v4.0 r 1823414 中,我只能将 If Controller 用于单个语句,而不能用于多个语句。我从here提取了多个语句的示例,建议使用

  

$ {__ javaScript(“ $ {responsecode}” ==“ 404”)} &&   $ {__ javaScript(“ $ {responseMessage}” ==“未找到”)}

我也检查了blazemeter tutorial page,但是它没有说明 If Controller 中的多个条件语句。

下面是我的测试计划示例

enter image description here

在我的调试采样器中,我可以看到以下内容

enter image description here

在测试计划的某个地方,我放入了 IF控制器,以检查两个变量是否等于not_found ...

${__javaScript(vars.get('manual_bug')=='not_found')} && ${__javaScript(vars.get('integration_bug')=='not_found')}

...因此将执行所有后续操作。但是,此 IF控制器要么从不执行,要么始终返回FALSE。不知道这是怎么回事。

在责怪我:-)之前,我没有做足够的研究并急于提出关于SO的问题,我将在下面提供我已经尝试过但没有帮助的示例:

  • 在变量周围用双引号

    $ {____ javaScript(vars.get(“ manual_bug”)==“ not_found”)} && $ {__ javaScript(vars.get(“ integration_bug”)==“ not_found”)}

  • 等号之间有额外的空格

$ {____ javaScript(vars.get('manual_bug')=='not_found')}} && $ {__ javaScript(vars.get('integration_bug')=='not_found')}

  • 避免使用vars.get

$ {__ javaScript($ {manual_bug} =='not_found')} && $ {__ javaScript($ {integration_bug} =='not_found')}

  • 使用不带vars.get的双引号

    $ {__ javaScript($ {manual_bug} ==“ not_found”)} && $ {__ javaScript($ {integration_bug} ==“ not_found”)}

我的日志文件看起来完全正常,没有错误

enter image description here

enter image description here

请告知是否有人能够在Jmeter工具中执行多个条件语句?谢谢!

2 个答案:

答案 0 :(得分:1)

在链接中引用的两个子句位于单个 __javaScript() function中,并且您具有2个不同的功能,因此JMeter不知道您的&&是什么意思特别是给定Interpret Condition as Variable Expression? If Controller的默认模式。

如果您打开If Controller GUI,也会看到以下警告:

  

为了提高性能,建议检查“将条件解释为变量表达式”       并使用__jexl3或__groovy评估为true或false或包含true或false的变量。       $ {JMeterThread.last_sample_ok}可用于测试最后一个采样器是否成功

因此,我建议您重新考虑您的方法并使用__groovy() function,相关语法应为:

${__groovy((vars.get('responseCode').equals('404') && vars.get('responseMessage').equals('Not Found')),)}

演示:

JMeter If Controller Multiple Clauses

答案 1 :(得分:0)

以下语法(带双引号)也可以使用,但是它还要求您取消选中“将条件解释为变量表达式”设置。

"${yourVariable}" != "not_found" && "${youAnotherVariable_matchNr}" == "1"