介绍
EasyExcel是阿里的一个基于Java,简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。
github地址:https://github.com/alibaba/easyexcel
官网地址:https://alibaba-easyexcel.github.io/docs/current/
使用
以下是一个基于Maven的Java项目,将简易的演示读写测试用例excel文档的操作过程。
基本流程为:从“接口测试用例模板.xlsx”中读取测试数据,再将测试结果写入到“接口测试用例.xlsx”中,完成操作。
1、环境准备
2、新建Maven项目并导入依赖
<!-- EasyExcel的依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
<!-- 日志依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<!-- json解析依赖 -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.0</version>
</dependency>
3、在resources下新建log4j.properties文件并填写如下
#### 设置###
log4j.rootLogger = INFO,stdout
#log4j.rootLogger = debug,info,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
4、编写Excel对应的实体类
package com.demo.easyexcel.data;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @author xcj
* 测试用例excel用例类
*/
@Getter
@Setter
@EqualsAndHashCode
public class ExcelData {
//接口编号
@ExcelProperty("接口编号")
private String interfaceNo;
//接口域名、IP
@ExcelProperty("域名/IP")
private String interfaceIP;
//接口端口
@ExcelProperty("端口")
private String interfacePort;
// 接口地址
@ExcelProperty("接口地址")
private String interfaceAddress;
//用例编号
@ExcelProperty("用例编号")
private String caseNo;
//用例名称
@ExcelProperty("用例名称")
private String caseName;
//接口类型
@ExcelProperty("接口类型")
private String interfaceType;
//头部参数
@ExcelProperty("headers")
private String headers;
//测试数据
@ExcelProperty("测试数据")
private String testData;
//关联数据,用于接口数据关联传递
@ExcelProperty("关联数据")
private String associatedData;
//预期结果
@ExcelProperty("预期结果")
private String expectedResults;
//实际结果
@ExcelProperty("实际结果")
private String actualResults;
//是否验证sql
@ExcelProperty("是否验证sql")
private String ifVerifySql;
//执行sql
@ExcelProperty("执行sql")
private String executeSql;
//预期sql结果
@ExcelProperty("预期sql结果")
private String expectedSqlResults;
//实际sql结果
@ExcelProperty("实际sql结果")
private String actualSqlResults;
//用例状态
@ExcelProperty("用例状态")
private String caseStatus;
//执行人
@ExcelProperty("执行人")
private String expecteMan;
//执行时间
@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
@ExcelProperty("执行时间")
private Date executionTime;
//备注
@ExcelProperty("备注")
private String remarks;
}
4、将测试用例文件放置在src\main\resources路径下
5、编写Excel操作类
读取接口测试用例模板内容进行测试,然后将结果内容写入新的xlsx文件。
package com.demo.easyexcel;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.demo.easyexcel.data.ExcelData;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
/**
* @author xcj
* Excel操作
*/
@Slf4j
public class Main {
final static int SIZE = 2;
static List list = ListUtils.newArrayListWithExpectedSize(SIZE);
public static void main(String[] args) throws IOException {
operation();
}
public static void operation() throws IOException {
//这个是测试用例模板(不进行变更)
String fileName = new File("").getCanonicalPath() + "\\src\\main\\resources\\接口测试用例模板.xlsx";
String fileName2 = new File("").getCanonicalPath() + "\\src\\main\\resources\\接口测试用例.xlsx";
// 这里 需要指定写用哪个class去写
try (ExcelWriter excelWriter = EasyExcel.write(fileName2, ExcelData.class).build()) {
// 这里注意 如果同一个sheet只要创建一次
WriteSheet writeSheet = EasyExcel.writerSheet("模块啊").build();
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
// 这里每次会读取100条数据 然后返回过来 直接调用使用数据就行
EasyExcel.read(fileName, ExcelData.class, new PageReadListener<ExcelData>(dataList -> {
for (ExcelData excelData : dataList) {
log.info("读取到一条数据{}", new Gson().toJson(excelData));
//todo 1、将读到的测试用例数据进行http请求
//todo 2、将http请求得到的结果与用例预期结果进行比较
//todo 3、接口响应结果比较通过,则判断是否需要校验sql,需要则校验
//todo 4、以上都验证通过后,则将测试结果写入excel中(包括“实际结果”、“sql实际结果”、“用例状态”、“执行时间”、“关联数据”)
//模拟测试不通过,写结果进excel
excelData.setCaseStatus("不通过");
excelData.setExecutionTime(new Date());
list.add(excelData);
//达到预期值就批量写入excel
if (list.size() > SIZE) {
excelWriter.write(list, writeSheet);
// 存储完成清理 list
list = ListUtils.newArrayListWithExpectedSize(SIZE);
}
}
//将剩余不足SIZE数量的list存储一下
excelWriter.write(list, writeSheet);
})).sheet().doRead();
}
}
}
评论区