【发布时间】:2018-10-03 15:08:37
【问题描述】:
回答问题
亲爱的读者,如果您愿意,请继续阅读问题。但至多我愿意提供 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 Controller 来检查两个变量是否等于 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")}
我的日志文件看起来完全正常,没有错误
请告知是否有人能够在 Jmeter 工具中执行多个条件语句?谢谢!
【问题讨论】:
标签: if-statement jmeter