如何在数组上使用 ForEach 控制器?
How to use ForEach controller on an array?
jmeter ForEach 控制器可用于迭代具有相同前缀的变量,如
myVar_1
myVar_2
myVar_3
但在我的例子中,输入变量是字符串数组,[ "val1", "val2", "val3" ]
如何遍历数组并为每个值发送单独的请求?
您无法将此 JSON Array 提供给 ForEach 控制器,但您可以 将其转换 为 ForEach 控制器可以理解的形式
- 在定义了这个JSON数组的变量后添加一个JSR223 Sampler
将以下代码放入"Script"区域:
def json = new groovy.json.JsonSlurper().parseText(vars.get("yourInputVariable"))
def counter = 1
json.each {
vars.put("myVar_" + counter, it)
counter++
}
将 yourInputVariable
替换为保存 JSON 数组的变量的实际名称
- 在 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]));
}
对我有用。
jmeter ForEach 控制器可用于迭代具有相同前缀的变量,如
myVar_1
myVar_2
myVar_3
但在我的例子中,输入变量是字符串数组,[ "val1", "val2", "val3" ]
如何遍历数组并为每个值发送单独的请求?
您无法将此 JSON Array 提供给 ForEach 控制器,但您可以 将其转换 为 ForEach 控制器可以理解的形式
- 在定义了这个JSON数组的变量后添加一个JSR223 Sampler
将以下代码放入"Script"区域:
def json = new groovy.json.JsonSlurper().parseText(vars.get("yourInputVariable")) def counter = 1 json.each { vars.put("myVar_" + counter, it) counter++ }
将
yourInputVariable
替换为保存 JSON 数组的变量的实际名称- 在 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]));
}
对我有用。