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

问题描述 投票:0回答:2

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

${__P(GET_URL,)}

这对于我一直使用的所有 URL 都很有效,除了那些我需要在 URL 组件中传递变量的 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}

感谢任何帮助/指示。

dynamic jmeter
2个回答
0
投票

这样不行,JMeter 在启动时不知道任何有关

${EMP_ID}
的信息,您需要将这个
${EMP_ID}
附加到运行时的 HTTP 请求 采样器“路径”

  1. 启动 JMeter:

    jmeter -JGET_URL=/getemployee/
    
  2. 使用CSV数据集配置从CSV文件中读取

    EMP_ID

  3. 在 HTTP 请求采样器中,使用类似

    /${__P(GET_URL,)}/${EMP_ID}
    的构造来组合通过
    -J
    命令行参数指定的 JMeter 属性和源自 CSV 文件的 JMeter 变量。

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


0
投票

不久前问过这个问题。考虑发布我最终实施的解决方案。在解决方案中,我创建了一个模板 jmx,其中包含 HttpSampler.path 的替换变量,然后在运行时替换该路径。以下是已完成脚本的要点。

事实证明,这是一个更简单的解决方案,适用于各种 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

© www.soinside.com 2019 - 2024. All rights reserved.