【参考答案】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
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!