If statement Jmeter:无法在If控制器中使用多个条件语句 问题的答案

If statement Jmeter:无法在If控制器中使用多个条件语句 问题的答案,if-statement,jmeter,If Statement,Jmeter,亲爱的读者,如果你愿意,你可以继续往下读,把问题通读一遍。但最重要的是,我愿意提供Dmitri的答案,这样其他人就不会浪费时间玩Jmeter If控制器了 如果希望在If控制器中使用多个条件语句, 特别是如果要检查变量是否等于某些字符串, 不要使用${uuuu javaScript()}函数!!!德米特里建议改用 ${uuuu groovy()}函数,在我的情况下可以使用。正确语法 在下面注意左括号、逗号位置和右括号: ${groovy((vars.get('yourVariable')).eq

亲爱的读者,如果你愿意,你可以继续往下读,把问题通读一遍。但最重要的是,我愿意提供Dmitri的答案,这样其他人就不会浪费时间玩Jmeter If控制器了

如果希望在If控制器中使用多个条件语句, 特别是如果要检查变量是否等于某些字符串, 不要使用${uuuu javaScript()}函数!!!德米特里建议改用 ${uuuu groovy()}函数,在我的情况下可以使用。正确语法 在下面注意左括号、逗号位置和右括号:

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

附加 如果您想在尝试使If控制器处理多个条件时节省时间,请始终取消选中将条件解释为变量表达式复选框。否则,您将不得不使用这些_javaScript、_groovy或其他函数,因为无法理解它们到底是如何工作的,以及为什么它们不能解析为true或false(在这种情况下,日志文件总是干净的)。这就是你在没有这些“功能”帮助的情况下所做的。请看我下面的例子

${yourVariable} != 'not_found' && ${youAnotherVariable_matchNr} == 1 
就这样,不需要使用任何函数


初始问题 在Jmeter v4.0 r 1823414中,我可以将If Controller仅用于单个语句,而不用于多个语句。使用多个语句的示例,我从中获取,并建议使用

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

我也检查过了,但它没有说明If Controller
中的多个条件语句

下面是我的测试计划示例

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

在测试计划的某个地方,我放置IF Controller检查两个变量是否等于
not_found

${__javaScript(vars.get('manual_bug')=='not_found')} && ${__javaScript(vars.get('integration_bug')=='not_found')}
…因此所有后续操作都将执行。但是,如果控制器
从未执行,或者总是返回FALSE,则此。不知道发生了什么事

在责怪我之前:-)我没有做足够的研究,并匆忙提出了一个问题,因此,我将提供以下我已经尝试过但没有帮助的示例:

  • 用双引号括住变量

    ${uuuJavaScript(vars.get(“手动错误”)==“未找到”)&${uuuJavaScript(vars.get(“集成错误”)==“未找到”)}

  • 等号之间有额外的空格

${\uuuJavaScript(vars.get('manual\u bug')=='not\u found')}&& ${uuuJavaScript(vars.get('integration\u bug')=='not\u found')}

  • 避免使用vars.get
${uuuJavaScript(${manual\u bug}=='not\u found')}&${uuuJavaScript(${integration\u bug}=='not\u found')}

  • 使用不带vars的双引号

    ${uuuJavaScript(${manual\u bug}==“not\u found”)}&${uuuJavaScript(${integration\u bug}==“not\u found”)}

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


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

在您引用的链接中,这两个子句位于一个单独的中,您有两个不同的函数,因此JMeter不知道您的
&
是什么意思,特别是在
将条件解释为变量表达式的情况下?
If控制器的默认模式

此外,如果打开,您将看到以下警告:

对于性能,建议选中“将条件解释为变量表达式” 并使用_jexl3或_groovy求值为true或false或包含true或false的变量。 ${JMeterThread.last_sample_ok}可用于测试最后一个采样器是否成功

因此,我建议重新考虑您的方法和使用,相关语法为:

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

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

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

谢谢你,德米特里。在我提供的每个示例中,我都使用了2个函数,每个函数都应该返回true或false。这不是Jmeter应该理解的默认行为吗?否?您指的是经过投票表决并被接受的,令人惊讶的是,它有多个条件。不我希望一个自认为是QA工程师的人对细节给予更高的关注。没有?对不起,我根本不在IT领域,所以可能没有注意到一些细节。