Jmeter动态URL属性,变量未替换

时间:2017-01-08 18:17:01

标签: dynamic jmeter

我有一个简单的Jmeter测试,我有一个属性来设置URL。 Jmeter测试中的PATH设置如下。

${__P(GET_URL,)}

这适用于我一直使用的所有网址,但我需要在网址组件中传递变量的网址除外。

例如,当我使用http://server:port/getemployeelist

运行测试时,它适用于-JGET_URL=/getemployeelist

然后我创建了一个CSV配置元素来填充变量EMP_ID

然后,如果我使用-JGET_URL=/getemployee/${EMP_ID}运行测试,则EMP_ID变量不会被替换。 Jmeter测试给出了如下错误:

  

java.net.URISyntaxException:索引xx处的路径中的非法字符:https://:// getemployee / $ {EMP_ID}

感谢任何帮助/指针。

2 个答案:

答案 0 :(得分:0)

它不会以这种方式工作,JMeter在启动时对${EMP_ID}一无所知,您需要将此${EMP_ID}附加到HTTP Request采样器“路径”在运行时

  1. 启动JMeter:

    jmeter -JGET_URL=/getemployee/
    
  2. 使用CSV Data Set Config阅读CSV文件中的EMP_ID

    JMeter CSV EMP ID

  3. 在HTTP请求采样器中使用类似/${__P(GET_URL,)}/${EMP_ID}的结构来组合通过-J命令行参数指定的JMeter属性和源自CSV文件的JMeter变量。

    JMeter properties and variables concatenation

  4. 如果出现任何问题,请首先检查 jmeter.log 文件 - 它通常包含足够的故障排除信息。如果没有任何可疑之处 - 使用Debug Sampler and View Results Tree listener combination检查请求和响应详细信息,变量和属性名称和值等。

答案 1 :(得分:0)

前段时间曾问过这个问题。想到发布最终最终实现的解决方案。在该解决方案中,我创建了一个带有HttpSampler.path替换变量的模板jmx,然后在运行时替换该路径。以下是完成脚本编写的要点。

事实证明这是适用于各种API调用模式的更简单解决方案。

  1. 使用以下行创建模板jmx(jmeter_test_template)。

<stringProp name="HTTPSampler.path">#PATH#</stringProp>

此jmx具有CSV配置元素,可填充变量“ EMP_ID”。要创建此文件,只需使用任何URL创建一个新测试,然后将其保存为模板,并用替换变量#PATH#替换URL。

  1. 使用用法创建了一个类似run_any_api.sh的包装器脚本,

sh run_any_api.sh URL=http://server:port/myapp/employees/${EMP_ID}

  1. 在包装脚本中,该URL代替了令牌。

sed "s/#PATH#/$URL" jmeter_test_template.jmx > jmeter_test_template.current_test.jmx

jmeter -t jmeter_test_template.current_test.jmx

  1. 最后但并非最不重要的一点,请记住清理临时jmx,

rm jmeter_test_template.current_test.jmx