如何在数组上使用 ForEach 控制器?

How to use ForEach controller on an array?

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

myVar_1
myVar_2
myVar_3

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

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

  1. 在定义了这个JSON数组的变量后添加一个JSR223 Sampler
  2. 将以下代码放入"Script"区域:

    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 控制器并执行 "normal" 配置,就像为 myVar_1, myVar_2,... 所做的那样 - 它会正常工作,因为 JSR223 采样器根据来自 JSON数组。

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

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

对于变量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

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

对我有用。