20211219--读取文件参数进行业务查询并把指定数据写入到文件
文档概要:
1、读取文件
2、进行业务查询
3、将指定的查询数据写入到文件中
说明
1、17号晚上加班验证项目上数据重复的问题,数据量小进行截图对比,当然也是很耗时间的,在验证前,需要把数据截图做记录,以便和执行脚本后的数据做对比。
2、这个只是小批量范围灰度验证,20号会有3千多条数据同时执行,虽然方案是抽验,但是想着如果能通过接口的形式,先将执行脚本前的数据进行批量保存到一个文件中,然后将执行脚本后的数据批量保存到另外一个文件中,然后合并后进行数据对比;这样可以保证大批量数据的验证。
3、之前的接口测试源数据是单个,这次需要批量的,所以需要将请求参数保存在文件里,通过程序读取后,传给业务接口去做查询;然后将查询的数据提取后重新写入到文件中。
4、操作文件前,请先在pom.xml文件中添加如下依赖:
一、读取文件
1、刚开始使用的是easyExcel来写的,虽然能读取数据,但是打印出来的是对象,按照目前的水平没有办法将参数传给查询接口。
2、后面在B找资料,采用POI来写,实现过程如下:
2.1、先将数据写入到一个excel文件里,这是读取文件之前的准备工作。
2.2、创建文件读取的方法,这里是使用文件流的方式,将文件路径粘贴进入的时候会自动加斜杠。
2.3、我们需要读取的是第一个sheet,第一个行的数据,所以索引都是从0开始。
2.4、假如需要读取多行数据,在for循环中根据实际表格字段来添加就好,这里只读取的是id信息。
2.5、其中int n = sheetRead.getPhysicalNumberOfRows(); 获取的是文件的行数,在for循环的时候只要小于该数
数字就行。
2.6、程序中记得关闭动作,查询结束后进行关闭流的一个操作。
3、进行业务查询前还需要创建一个实体类,用于存放变量对象,相当于桥梁的作用,在此次的场景中可以理解为:业务查询提取的数据通过该桥梁可以写入到文件中。
3.1、四个注解分别为:
@Data:代替geter和seter
@Builder:代替@Override
@NoArgsConstructor:无参构造
@AllArgsConstructor:全参构造
前提要先导入lombok,这样看起来界面就整洁很多。
4、处理逻辑
4.1、在readAndWriteExcel()方法中的for循环里加上:ExcelDTO excelDTO = query.getByApi(id);其中id就是 获取文件里的id,来传给getByApi()方法。
4.2、在public static ExcelDTO getByApi(String abc) throws Exception{}传入形参进行引用就可以啦。
二、进行业务查询
1、定义public static ExcelDTO getByApi(String abc) throws Exception{},来接收传过来的参数,同时ExcelDTO还会接收返回的指定参数。
2、其中if判断,接口执行成功进入if(){}中进行后续的操作,涉及提取数据、提取的数据添加到对象里;不成功直接return null;
三、将指定的查询数据写入到文件中
1、查询接口提取指定的数据后,通过对ExcelDTO对象接收给写入文件的程序进行使用,达到数据写入文件的场景。
2、基本步骤是创建一个文件、创建一个工作簿、创建一个sheet,
2.1、创建文件使用获取系统毫秒数,并使用concat()来拼接的,这样每次执行后产生不同的文件,避免使用同一文件被覆盖的情况,【因为有时候会拿当前文件和之前的文件做比较】
2.2、for(....){
Row rowWrite= sheetWrite.createRow(i); //根据次数写入到第几列
rowWrite.createCell(0).setCellValue(excelDTO.getId()); //在第一行写数据
rowWrite.createCell(1).setCellValue(excelDTO.getReceiptProductList());}//在第二行写数据
3、最后别忘记写入和关闭操作
wbWrite.write(fop);
fop.close();
4、写入文件数据效果如下图
最后
1、本文场景涉及到读取文件然后将读取的参数传给查询业务接口、查询业务接口返回的数据进行提取后写入到文件。
2、解决问题的思路很总要,目前我还停留在入门阶段,后面的写入文件实现是我老弟帮忙指导实现的。特此感谢!!