亲爱的读者,请根据需要,进一步进行阅读。但最重要的是,我愿意提供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
就是这样,不需要使用任何功能。
在 Jmeter v4.0 r 1823414 中,我只能将 If Controller 用于单个语句,而不能用于多个语句。我从here提取了多个语句的示例,建议使用
$ {__ javaScript(“ $ {responsecode}” ==“ 404”)} && $ {__ javaScript(“ $ {responseMessage}” ==“未找到”)}
我也检查了blazemeter tutorial page,但是它没有说明 If Controller 中的多个条件语句。
下面是我的测试计划示例
在我的调试采样器中,我可以看到以下内容
在测试计划的某个地方,我放入了 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')}
$ {__ javaScript($ {manual_bug} =='not_found')} && $ {__ javaScript($ {integration_bug} =='not_found')}
使用不带vars.get的双引号
$ {__ javaScript($ {manual_bug} ==“ not_found”)} && $ {__ javaScript($ {integration_bug} ==“ not_found”)}
我的日志文件看起来完全正常,没有错误
请告知是否有人能够在Jmeter工具中执行多个条件语句?谢谢!
答案 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')),)}
演示:
答案 1 :(得分:0)
以下语法(带双引号)也可以使用,但是它还要求您取消选中“将条件解释为变量表达式”设置。
"${yourVariable}" != "not_found" && "${youAnotherVariable_matchNr}" == "1"