我有一个简单的 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}
感谢任何帮助/指示。
这样不行,JMeter 在启动时不知道任何有关
${EMP_ID}
的信息,您需要将这个 ${EMP_ID}
附加到运行时的 HTTP 请求 采样器“路径”
启动 JMeter:
jmeter -JGET_URL=/getemployee/
使用CSV数据集配置从CSV文件中读取
EMP_ID
在 HTTP 请求采样器中,使用类似
/${__P(GET_URL,)}/${EMP_ID}
的构造来组合通过 -J
命令行参数指定的 JMeter 属性和源自 CSV 文件的 JMeter 变量。
如果出现任何问题,首先检查 jmeter.log 文件 - 它通常包含足够的故障排除信息。如果没有任何可疑之处 - 使用 Debug Sampler 和 View Results Tree 侦听器组合 来检查请求和响应详细信息、变量和属性名称和值等。
不久前问过这个问题。考虑发布我最终实施的解决方案。在解决方案中,我创建了一个模板 jmx,其中包含 HttpSampler.path 的替换变量,然后在运行时替换该路径。以下是已完成脚本的要点。
事实证明,这是一个更简单的解决方案,适用于各种 API 调用模式。
<stringProp name="HTTPSampler.path">#PATH#</stringProp>
此 jmx 具有 CSV 配置元素来填充变量“EMP_ID”。要创建此文件,只需使用任何 URL 创建一个新测试,然后将其保存为模板并用替换变量 #PATH# 替换该 URL。
sh run_any_api.sh URL=http://server:port/myapp/employees/${EMP_ID}
sed "s/#PATH#/$URL" jmeter_test_template.jmx > jmeter_test_template.current_test.jmx
jmeter -t jmeter_test_template.current_test.jmx
rm jmeter_test_template.current_test.jmx