【参考答案】java基础练习:反射
要求
读取所有数据并保存到对象集合
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;
/**
* @公众号 : 全栈测试笔记
* @博客 : www.cnblogs.com/uncleyong
* @微信 : ren168632201
* @描述 : <>
*/
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;
/**
* @博客 : www.cnblogs.com/uncleyong
* @微信 : ren168632201
* @描述 : <>
*/
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);
}
}
}
说明:这种方式只能处理固定对象类型,可以继续优化,使用泛型
【java百题计划汇总】
详见:https://www.cnblogs.com/uncleyong/p/15828510.html
原文会持续更新,原文地址:https://www.cnblogs.com/uncleyong/p/17044014.html
__EOF__
本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!

浙公网安备 33010602011771号