${__P()} 中的变量插值

Variable interpolation within a ${__P()}

我正在尝试在 ${__P()} 函数中插入一个变量,并且已经阅读了几个关于此事的线程,但它不起作用。我的用户定义变量包含:

FALLBACK_TOKEN someLongString
ACTUAL_TOKEN ${__P(tokenSetOnCommandLine,???)}

到目前为止尝试过:

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

根据 http://jmeter.apache.org/usermanual/functions.html#__evalVar 上的 Jmeter 文档,我希望 evalVareval 都能正常工作(老实说,仍然不太清楚其中的区别)。我错过了什么?

属性 正在填充 before 用户定义的变量值被评估,因此它不会以这种方式工作。

选项在:

  1. 在 .jmx 脚本中硬编码默认值,例如:

    ${__P(tokenSetOnCommandLine,something)}
    
  2. user.properties文件中设置默认值(在JMeter的/bin文件夹下),添加以下行:

    tokenSetOnCommandLine=something
    

    在第二种情况下,如果您提供 tokenSetOnCommandLine 值作为命令行参数,例如:

    jmeter -JtokenSetOnCommandLine=somethingElse
    

    它将用 somethingElse 覆盖 something 的 "default" 值。否则将使用 something

有关 JMeter 属性的详细信息,请参阅 Apache JMeter Properties Customization Guide