【问题标题】:Jmeter dynamic URL property with variable not substituted未替换变量的 Jmeter 动态 URL 属性
【发布时间】:2017-01-08 18:17:01
【问题描述】:

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

${__P(GET_URL,)}

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

例如,当我使用-JGET_URL=/getemployeelist 运行测试时,它适用于http://server:port/getemployeelist

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

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

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

感谢任何帮助/指针。

【问题讨论】:

    标签: dynamic jmeter


    【解决方案1】:

    这样不行,JMeter 在启动时对${EMP_ID} 不了解,您需要在运行时将此${EMP_ID} 附加到HTTP Request 采样器“路径”

    1. 将 JMeter 启动为:

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

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

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

    【讨论】:

    • 谢谢。我试图做的是,通过调用 jmeter -JGET_URL=url1、-JGET_URL=url2 等来使用单个 jmx 来测试我的一堆 REST API。 url1 需要 ${EMP_ID},如您在上面的示例中所示,但 url2 不能在 URL 中包含 ${EMP_ID}。由于 EMP_ID 的 CSV 数据配置是 jmx 的一部分,因此我传入 -JGET_URL 的每个 URL 都会获取此 EMP_ID 并且不起作用。因此麻烦。
    • 使用__evalVar() 函数代替/${__P(GET_URL,)}/${__evalVar(EMP_ID)}。如果您的 EMP_ID 变量不会被初始化 - 该值将为空白,如果该变量将具有该值 - 您将在路径中看到该值。请参阅Functions and Variables JMeter 用户手册章节和How to Use JMeter Functions 系列帖子以熟悉 JMeter 功能。
    • @DmitriT - 这个解决方案对我不起作用 - 它一直是空白的
    【解决方案2】:

    不久前问过这个问题。想到发布我最终实施的解决方案。在解决方案中,我为 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多