Jmeter中Beanshell预处理器中字符串数组的处理

Process of Array of Strings in Beanshell preprocessor in Jmeter

我有一个 Jmeter(4.0 版)测试脚本,我在其中使用 json 提取器使用 $..Names[ 从响应 json 中获取字符串数组=20=] 并将其存储在变量 groupOfNames 中。各种名称存储为 groupOfNames_1、groupOfNames_2、groupOfNames_ALL.

我需要 POST 调用下一个正文为

{
"name1", "name2", "name3" (--actual values--)
}

如何使用 bean shell 预处理器实现此目的? groupOfNames_ALL 给了我所有的价值,但像这样.... name1, name2, name3(没有引号围绕个人名字)。请帮忙。谢谢

将以下代码放入您的 BeanShell 预处理器:

int matchNr = Integer.parseInt(vars.get("groupOfNames_matchNr"));

for(int i = 1; i <= matchNr; i++){
    String Names = vars.get("groupOfNames_" + i);
    if(i == matchNr){
        vars.put("AllNames", vars.get("AllNames") + "\"" + Names + "\"");
    }
    else if(i == 1){
        vars.put("AllNames","\"" + Names + "\", ");
    }
    else{
        vars.put("AllNames", vars.get("AllNames") + "\"" + Names + "\", ");
    }

然后在您的 post 中使用变量 ${AllNames},如下所示:

{
${AllNames}
}

我听说 Groovy is the New Black 所以你可以在每个名字周围加上引号,就像:

vars.put('groupOfNames_ALL',vars.get('groupOfNames_ALL').split(',').collect {"\"$it\""  }.join(', '))

演示:

另外温馨提示:JMeter users are encouraged to use JSR223 Test Elements for any form of scripting since JMeter 3.1