JMeter变量输出作为属性名称的一部分?

时间:2016-10-06 14:54:17

标签: java jmeter

所以我正在使用JMeter 3进行一些性能测试,我刚刚被要求让它变得更有活力......

我正在使用Properties File Reader插件,并将其指向包含此类条目的文件 -

DEV_SEARCH_API_URL=example.com
QA_SEARCH_API_URL=example2.com

现在我有一个名为

的用户定义变量
env | ${__P(perf.environment, qa)}

然后我正在执行构建此类网址的HTTP请求

https://${login_serverName}/${env}/authentication/login

我从另一个UDV中调用QA_SEARCH_API_URL

login_serverName |  ${__P(QA_AUTHENTICATION_API_URL)}

这样可行,但我想要做的是用来自UDV $ {env}的值替换变量的QA部分(因为这将是QA或DEV),从而正确调用我的属性文件中的网址...

我试过了

${__P(${env}_AUTHENTICATION_API_URL)}

但这不起作用,也不会返回任何东西,我不相信这是不可能的,我只是做错了...

非常感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:4)

TL; DR

当您将变量放在彼此之内时,您几乎总是想要evalVar

有几种方法可以在JMeter中讨论变量(和属性)。

示例变量:

var | something< =我们将要投入其他内容的变量

something_more_stuff | ${something_else}< =将通过组合事物而生成的变量

something_else | even more stuff< =我们尝试获取的变量

示例查询:

${${var}_more_stuff} | ${${var}_more_stuff}

${__V(${var}_more_stuff})} | ${something_else}

${__eval(${var}_more_stuff})} | var_more_stuff

${__evalVar(${var}_more_stuff})} | even more stuff

正如您所看到的,放置"可变括号"在彼此内部是不起作用的。其他所有东西都略有不同,这很有趣,但不一定有用。当您将变量放在彼此内部时,您几乎总是想要evalVar

答案 1 :(得分:3)

可以使用__V() function。根据文件:

  

例如,如果其中一个变量 A1,A2 N = 1

     
      
  • $ {A1} - 工作正常

  •   
  • $ {A $ {N}} - 无效(嵌套变量引用)

  •   
  • $ {__ V(A $ {N})} - 工作正常。 A $ {N} 变为 A1 __ V 函数返回值A1

  •   
  1. 如果env是JMeter变量:

    ${__V(${env}_AUTHENTICATION_API_URL)}
    
  2. 如果env是JMeter属性:

    ${__V(${__P(env,)}_AUTHENTICATION_API_URL)}
    
  3. 更多信息和提示:Here’s What to Do to Combine Multiple JMeter Variables

答案 2 :(得分:0)

$ {__ groovy(props.get(vars.get(“env”)+“_ AUTHENTICATION_API_URL”))}