我试图在 ${__P()} 函数中插入一个变量,并且已经阅读了几个关于此事的线程,但它不起作用。我的用户定义变量包含:
FALLBACK_TOKEN someLongString
ACTUAL_TOKEN ${__P(tokenSetOnCommandLine,???)}
Run Code Online (Sandbox Code Playgroud)
到目前为止尝试过:
ACTUAL_TOKEN ${__P(tokenSetOnCommandLine,${FALLBACK_TOKEN})}
// literally returns "${FALLBACK_TOKEN}" (as expected as per Jmeter docs)
ACTUAL_TOKEN ${__P(tokenSetOnCommandLine,${__V(${FALLBACK_TOKEN})})}
// same as above
ACTUAL_TOKEN ${__P(tokenSetOnCommandLine,${__evalVar(${FALLBACK_TOKEN})})}
// returns blank
ACTUAL_TOKEN ${__P(tokenSetOnCommandLine,${__eval(${FALLBACK_TOKEN})})}
// literally returns "${FALLBACK_TOKEN}"
ACTUAL_TOKEN ${__P(tokenSetOnCommandLine,${__eval(FALLBACK_TOKEN)})}
// returns "FALLBACK_TOKEN"
ACTUAL_TOKEN ${__P(tokenSetOnCommandLine,${__evalVar(FALLBACK_TOKEN})})}
// returns blank
Run Code Online (Sandbox Code Playgroud)
按照文档的JMeter在http://jmeter.apache.org/usermanual/functions.html#__evalVar,我希望无论是evalVar或eval工作(上分歧仍然有点不清楚,说实话)。我错过了什么?
在评估用户定义的变量值之前填充属性,因此它不会以这种方式工作。
选项在:
在 .jmx 脚本中硬编码默认值,如:
${__P(tokenSetOnCommandLine,something)}
Run Code Online (Sandbox Code Playgroud)在user.properties文件(在 JMeter 的 /bin 文件夹下)中设置默认值,添加以下行:
tokenSetOnCommandLine=something
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,如果您提供tokenSetOnCommandLine值作为命令行参数,例如:
jmeter -JtokenSetOnCommandLine=somethingElse
Run Code Online (Sandbox Code Playgroud)
它将覆盖somethingwith 的“默认”值somethingElse。否则something将被使用。
有关JMeter 属性的更多信息,请参阅Apache JMeter 属性自定义指南