如何在阵列上使用ForEach控制器?

时间:2017-05-03 04:38:16

标签: jmeter jmeter-plugins

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

myVar_1
myVar_2
myVar_3

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

2 个答案:

答案 0 :(得分:5)

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

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

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

    yourInputVariable替换为包含JSON数组的变量的实际名称

  4. 在JSR223采样器下添加ForEach控制器并像执行myVar_1, myVar_2,...一样执行“正常”配置 - 它将正常工作,因为JSR223采样器根据来自JSON阵列的数据创建相关变量。
  5. 有关详情,请参阅Parsing and producing JSON - GroovyGroovy Is the New Black文章。

答案 1 :(得分:0)

我尝试了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]));
    }

对我有用。