今天遇到一个场景,通过正则表达式提取多个值,然后保存到文件中去
正则表达式
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 控制器进行
- 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?:用户定义的变量有没有下划线分隔编号,最好还是勾上比较方便标识;
- 在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脚本,检查保存的文件数据,数据正确