文章目录
前言
在工作中有时候需要给业务导出数据,简单的我一般是通过数据库编写sql语句,然后导出excel,有时候使用开发封装的接口,获取接口的响应数据到本地。今天就分享一下怎么将响应数据中的某些字段保存到本地。
一、简单示例(单个字段)
如获取登录接口中的token,并保存到本地:
1.使用jmeter调试登录接口成功
2.使用json提取器或者正则表则式提取token
通常我比较喜欢使用json提取器获取字段,json提取器和正则表达式的使用方法大家可以搜搜一下,主要是jsonpath的路径和正则表达式填写正确
3.添加BeanShell 后置处理程序,编写脚本
代码如下(示例):
FileWriter fstream = new FileWriter("D:\\test.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(vars.get("token")+"\n");
out.close();
fstream.close();
二、复杂示例(多个字段,响应数据为集合类型)
例如:一条结算单,里面包含了多条报销明细,有结算的,未结算的,但是系统页面上显示的是未报销的数据
业务提出需求为:需要导出所有状态的报销数据(结算的,未结算的),导出字段为:金额,结算金额,流程名称,结算状态
1.使用jmeter调试登录接口成功(同上,不在赘述)
2.使用json提取器或者正则表则式提取需要的字段
json提取器中,可以一下提取多个字段,我以提取三个字段为例
注意:多个字段,提取器中需要以英文的 ; 分隔
添加一个调试后置处理,可以查看到json提取器提取三个字段成功
3.添加BeanShell 后置处理程序,编写脚本
注意点:
1.因为是集合形式,我们需要循环输出,然后需要找到循环的条件表达式,这个值加了调试后置处理就可以看到,由于我取了三个字段,三个字段是一一对应的,即flow_name_matchNr=50;settle_status_matchNr=50 ;amount_matchNr=50 所以取了其中一个。
2.write字段时,通过观察调试的数据可以看到,得到的值是变量名称_index的,所以我们再out.write,get变量时也需要拼接一下index.即 “flow_name_”+i
out.write(vars.get("flow_name_"+i)+",");//逗号表示换行
out.write(vars.get("amount_"+i)+",");//逗号表示换行
out.write(vars.get("settle_status_"+i)+"\n");// \n表示换列
代码如下(示例):
FileWriter fstream = new FileWriter("D:\\re.csv",true);
BufferedWriter out=new BufferedWriter(fstream);
num=vars.get("flow_name_matchNr");
for(int i=1;i<=(Integer.parseInt(num));i++){
//log.info("i="+i);
//log.info(vars.get("flow_name_"+i)); //查看是否获取到变量
//log.info(vars.get("settle_status_"+i));
out.write(vars.get("flow_name_"+i)+",");
out.write(vars.get("amount_"+i)+",");
out.write(vars.get("settle_status_"+i)+"\n");
}
out.close();
fstream.close();
总结
以上就是今天要讲的内容,由于自己当时也是踩了一些坑,搜了好几个资料,博客才弄出来了,所以简单的总结一下,给自己留一个笔记,也希望对看到的人有点帮助吧。