Jmeter之 forEach 遍历所有值

今天遇到一个场景,通过正则表达式提取多个值,然后保存到文件中去

正则表达式
image

1、一开始的思路是通过后置 Beanshell断言进行,得到文件数据为 null
FileWriter fstream=new FileWriter ("D://test.csv",true);
BufferedWriter out=new BufferedWriter(fstream);
out.write(vars.get("type")+"\n");
out.close();
fstream.close();
2、修改 beanshell 代码
FileWriter fstream=new FileWriter ("D://test.csv",true);
BufferedWriter out=new BufferedWriter(fstream);

for(int num=1; num<=5; num++){
  //拼接变量名称
  type = "type"+"_"+num;
  System.out.println(type);

  //把拼接的名称赋值给 type_num
  vars.put("type",type);
  System.out.println(vars.get(type));

  //vars.get()获取到变量名称,并和上面返回的 type_num_(2,3,4,5,6)名称一致,取到变量的值
  out.write(vars.get(mipAccount)+"\n");
}

out.close();
fstream.close();

功能能实现,但是这个需要提前知道循环了多少次得到的数据才正确,不灵活

3、通过 forEach 控制器进行

image

  • forEach控制器设置
    名称:字面意思,ForEach Controller的名称
    注释:字面意思
    输入变量前缀:变量的前缀;如要使用的变量为name_1,则需要填name。
    Start index for loop(exclusive):从X-1号的变量开始,X为第几个变量;如填0,实际从第一个开始。
    End index for loop(inclusive):到X+1的变量结束,X为第几个变量;如填4,实际第4个不会被使用,只会到第3个。
    输出变量名称:将要用来使用的变量名,不填则循环所有值
    Add“_”before number?:用户定义的变量有没有下划线分隔编号,最好还是勾上比较方便标识;

image

  • 在forEach 下添加 Beanshell Sampler ,写上代码
FileWriter fstream=new FileWriter ("D://test.csv",true);
BufferedWriter out=new BufferedWriter(fstream);
out.write(vars.get("newType")+"\n");
out.close();
fstream.close();

执行jmeter脚本,检查保存的文件数据,数据正确
image

posted @ 2021-11-30 14:12  DeyouKong  阅读(759)  评论(0编辑  收藏  举报