要求
读取所有数据并保存到对象集合
List<TestCase> testcases = new ArrayList<TestCase>();
excel用例数据
表单名:testcase
参考答案
pom依赖
选下面这个
这个依赖了poi
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
测试用例实体类
package com.qzcsbj;
/**
* @公众号 : 全栈测试笔记
* @描述 : <>
*/
public class TestCase {
private String caseId;
private String describe;
private String url;
private String method;
private String parameters;
private String expect;
private String actual;
public String getCaseId() {
return caseId;
}
public void setCaseId(String caseId) {
this.caseId = caseId;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getParameters() {
return parameters;
}
public void setParameters(String parameters) {
this.parameters = parameters;
}
public String getExpect() {
return expect;
}
public void setExpect(String expect) {
this.expect = expect;
}
public String getActual() {
return actual;
}
public void setActual(String actual) {
this.actual = actual;
}
@Override
public String toString() {
return "TestCase{" +
"caseId='" + caseId + '\'' +
", describe='" + describe + '\'' +
", url='" + url + '\'' +
", method='" + method + '\'' +
", parameters='" + parameters + '\'' +
", expect='" + expect + '\'' +
", actual='" + actual + '\'' +
'}';
}
}
实现
package com.qzcsbj;
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @描述 : <>
*/
public class Practice2 {
public static List<TestCase> testcases = new ArrayList<TestCase>();
public static void readExcel(String excelPath, String sheetName){
// 获取类字节码
Class<TestCase> caseClass = TestCase.class;
// 创建WorkBook对象
try {
Workbook workbook = WorkbookFactory.create(new File(excelPath));
Sheet sheet = workbook.getSheet(sheetName);
// 获取第一行,Row是行对象类型
Row firstRow = sheet.getRow(0); // 行索引从0开始
int lastCellNum = firstRow.getLastCellNum();
// System.out.println(lastCellNum);
String[] titles = new String[lastCellNum];
for (int i = 0; i < lastCellNum; i++) {
Cell cell = firstRow.getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
// 设置列的类型为字符串
// cell.setCellType(CellType.STRING);
String title = cell.getStringCellValue();
// title = title.substring(0,title.indexOf(":"));
// 值保存到数组
titles[i] = title;
}
// 打印解析出来的标题
System.out.println(Arrays.toString(titles));
// 获取sheet最后一行的行号
int lastRowNum = sheet.getLastRowNum();
for (int i = 1; i <= lastRowNum ; i++) {
// 每行数据一个对象
TestCase caseObject = caseClass.newInstance();
// 获取一行数据
Row rowData = sheet.getRow(i);
System.out.print("第"+i+"行数据:");
for (int j = 0; j < lastCellNum ; j++) {
Cell cell = rowData.getCell(j, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
cell.setCellType(CellType.STRING);
String cellValue = cell.getStringCellValue();
System.out.print("【"+ titles[j] + "="+ cellValue+"】");
String methodName = "set" + titles[j];
Method method = caseClass.getMethod(methodName, String.class);
// 反射调用
method.invoke(caseObject, cellValue);
}
System.out.println();
// 封装好测试数据的对象添加到集合
testcases.add(caseObject);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
readExcel("E:\\case.xlsx","testcase");
System.out.println("\n===============打印对象=============\n");
for (TestCase testcase: testcases){
System.out.println(testcase);
}
}
}
说明:这种方式只能处理固定对象类型,可以继续优化,使用泛型
__EOF__
本文作者:持之以恒(韧)