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

ebr*_*ebr 3 jmeter

我试图在 ${__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,我希望无论是evalVareval工作(上分歧仍然有点不清楚,说实话)。我错过了什么?

Dmi*_*i T 5

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

选项在:

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

    ${__P(tokenSetOnCommandLine,something)}
    
    Run Code Online (Sandbox Code Playgroud)
  2. 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 属性自定义指南