【问题标题】:How to use ForEach controller on an array?如何在数组上使用 ForEach 控制器?
【发布时间】:2017-05-03 04:38:15
【问题描述】:

jmeter ForEach 控制器可用于迭代具有相同前缀的变量,例如,

myVar_1
myVar_2
myVar_3

但在我的情况下,输入变量是字符串数组,[ "val1", "val2", "val3" ] 如何遍历数组并为每个值发送单独的请求?

【问题讨论】:

  • 你是从响应中提取数组吗?
  • 是的。我通过在响应上应用 JSON 路径提取器从响应中提取数组。

标签: jmeter jmeter-plugins


【解决方案1】:

您无法将此 JSON Array 提供给 ForEach 控制器,但您可以将其转换为 ForEach 控制器可以理解的形式

  1. 在定义保存此 JSON 数组的变量后添加 JSR223 Sampler
  2. 将以下代码放入“脚本”区域:

    def json = new groovy.json.JsonSlurper().parseText(vars.get("yourInputVariable"))
    def counter = 1
    json.each {
        vars.put("myVar_" + counter, it)
        counter++
    }
    

    yourInputVariable 替换为保存 JSON 数组的变量的实际名称

  3. 在 JSR223 采样器下添加 ForEach 控制器并执行“正常”配置,就像为 myVar_1, myVar_2,... 所做的那样 - 它会正常工作,因为 JSR223 采样器会根据 JSON 数组中的数据创建相关变量。

有关详细信息,请参阅 Parsing and producing JSON - GroovyGroovy Is the New Black 文章。

【讨论】:

    【解决方案2】:

    与使用相同前缀变量的方式相同。

    对于变量myVar

    myVar = ["val1", "val2", "val3"];
    //Following variables are automatically created
    myVar_1 = "val1";
    myVar_2 = "val2";
    myVar_3 = "val3";
    

    ForEach 控制器将用于myVar_1, myVar_2, myVar_3

    使用Debug Sampler来确保。

    jmeter 版本:3.1 r1770033

    【讨论】:

      【解决方案3】:

      我尝试了 Dmitri 的答案,但基本上被 groovy 脚本卡住了,因为它仅适用于简单的字符串数组。然而,我需要一个更复杂的 JSON 对象数组。 然后我将脚本语言切换为 ecmascript 并基于原始脚本编写了一个很好的旧 JS,如下所示:

          var jsonObject = JSON.parse(vars.get("ReportSources"));
          for(var index = 0; index < jsonObject.length; index++) {
              vars.put("rs_" + (index + 1), JSON.stringify(jsonObject[index]));
          }
      

      它对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        • 2019-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-09
        相关资源
        最近更新 更多