0
点赞
收藏
分享

微信扫一扫

【参考答案】java基础练习:反射

要求

读取所有数据并保存到对象集合

List<TestCase> testcases = new ArrayList<TestCase>();

 

excel用例数据

表单名:testcase

【参考答案】java基础练习:反射_java

 

参考答案

pom依赖

选下面这个

【参考答案】java基础练习:反射_数据_02

 

这个依赖了poi

【参考答案】java基础练习:反射_数据_03

 

<!-- 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__


本文作者:持之以恒(韧)




举报

相关推荐

0 条评论