TestNG如何用excel来做数据驱动
2015-11-10 19:20
471 查看
最近在开展接口测试的自动化,目前已经实现了用xml文件作为数据驱动,下面主要是针对excel文件作为数据驱动的方法,这里面涉及到4个java文件;Idata.java(该文件主要提供统一的接口),BaseExcelData.java(把excel的数据取出来放到list中,在把list中的数据放到Object[][]数组中),ExcelDataProvider.java,Exceltest.java;
Idata.java: package test.java.data; /** * @author bjlijia * @version 1.0.0 */ public interface IData { public Object[][] getData(String caseName, String dataFile); public Object[][] getData(String caseName, String dataFile,int colNum) ; public Object[][] getData(String caseName, String dataFile,int beginNum,int endNum) ; } BaseExcelData.java: package test.java.data; import java.io.*; import java.util.ArrayList; import jxl.*; import jxl.read.biff.BiffException; /** * @author kaixie * @version 1.0.0 */ public class BaseExcelData implements IData{ String defaultPath = "data/"; public Object[][] getData(String caseName, String dataFile){ return getData(caseName, dataFile, 0); } public Object[][] getData(String caseName, String dataFile, int rowNum) { Object[][] data = null; try { data = addList(caseName, dataFile, rowNum); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; } public Object[][] getData(String caseName, String dataFile, int beginRowNum, int endRowNum) { Object[][] data = null; try { data = addList2(caseName, dataFile, beginRowNum, endRowNum); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; } private Object[][] addList(String caseName,String dataFile,int rowNum) throws FileNotFoundException{ ArrayList<Object> list = new ArrayList<Object>(); // 文件路径 InputStream is = new FileInputStream(defaultPath + dataFile); Object[][] data = null; try { Workbook wb = Workbook.getWorkbook(is); Sheet rs = wb.getSheet(caseName); //获取表格总行数 int rsRows = rs.getRows(); //获取表格总列数 int rsColumns = rs.getColumns(); if(rs!=null){ for (int i = 1; i <= rsRows-1; i++){ for (int j=0; j <= rsColumns-1; j++){ Cell c = rs.getCell(j, i); String cz = c.getContents(); list.add(cz); } } //System.out.println(list); } if (rowNum <= 0 || rowNum >= rsRows) { data = new Object[rsRows-1][rsColumns]; int k = -1; for (int i = 0; i < rsRows-1; i++) { for (int j = 0; j < rsColumns; j++) { if (k < list.size()) k++; data[i][j] = list.get(k); //System.out.println("i="+i+","+"j="+j+","+data[i][j]); } } } else { int k = -1; data = new Object[rowNum][rsColumns]; for (int i = 0; i < rowNum; i++) { for (int j = 0; j < rsColumns; j++) { if (k < list.size()) k++; if (i <= (rowNum - 1)) { data[i][j] = list.get(k); } } } } wb.close(); } catch (BiffException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; } private Object[][] addList2(String caseName, String dataFile, int beginNum, int endNum) throws FileNotFoundException { ArrayList<Object> list = new ArrayList<Object>(); // 文件路径 InputStream is = new FileInputStream(defaultPath + dataFile); Object[][] data = null; try { Workbook wb = Workbook.getWorkbook(is); Sheet rs = wb.getSheet(caseName); //获取表格总行数 int rsRows = rs.getRows(); //获取表格总列数 int rsColumns = rs.getColumns(); if(rs!=null){ for (int i = 1; i <= rsRows-1; i++){ for (int j=0; j <= rsColumns-1; j++){ Cell c = rs.getCell(j, i); String cz = c.getContents(); list.add(cz); } } //System.out.println(list); } int sub = (endNum - beginNum) + 1; data = new Object[sub][rsColumns]; if (beginNum <= 0 || endNum > rsRows) { if(beginNum <= 0&&endNum > rsRows){ beginNum=0; endNum=rsRows; data = new Object[rsRows][rsColumns]; for (int i = 0; i < sub; i++) { for (int j = 0; j < rsColumns; j++) { if (beginNum < rsRows*rsColumns) data[i][j] = list.get(beginNum); beginNum++; } } }else if (beginNum <= 0&&endNum <= rsRows){ beginNum=0; sub=(endNum - beginNum); data = new Object[endNum][rsColumns]; for (int i = 0; i < sub; i++) { for (int j = 0; j < rsColumns; j++) { if (beginNum < sub * rsColumns) data[i][j] = list.get(beginNum); beginNum++; } } }else { endNum=rsRows; sub=(endNum - beginNum) + 1; data = new Object[sub][rsColumns]; for (int i = 0; i < sub; i++) { for (int j = 0; j < rsColumns; j++) { if (beginNum <=sub * rsColumns) data[i][j] = list.get(beginNum-1); beginNum++; } } } } else { int k = 0; int a=beginNum*rsColumns; for (int i = 0; i < sub; i++) { for (int j = 0; j < rsColumns; j++) { if (k < sub * rsColumns) data[i][j] = list.get(a+k-2); k++; } } } wb.close(); } catch (BiffException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; } } ExcelDataProvider.java: package test.java.data; import java.io.FileNotFoundException; import java.lang.reflect.Method; import org.testng.annotations.DataProvider; /** * @author kaixie * @version 1.0.0 */ public class ExcelDataProvider { // 从XML文本文件中获得数据 @DataProvider(name = "GetDataFromXml") public static Object[][] getTestDataFromXml(Method m) throws FileNotFoundException { // 通过反射获得函数名称,可以为多个测试方法提供数据驱动 Object[][] o = new Object[][] {}; // 取用例数据集d1Test的全部数据(excel数据源) if (m.getName().equals("test1")) { return new BaseExcelData().getData("testA", "DataProvider.xls",2,5); } if (m.getName().equals("test2")) { return new BaseExcelData().getData("testB", "DataProvider.xls",2,5); } //取用例数据集d2Test的全部数据(excel数据源) /*if (m.getName().equals("test1")) { return new BaseExcelData.getData("d1Test","caipiaoTest.xls") }*/ return o; } } caipiaotest.java: package test.java.testcase; import org.testng.annotations.Test; import test.java.data.DataProvider2; import test.java.data.ExcelDataProvider; public class Exceltest { @Test(dataProvider = "GetDataFromXml", d bb31 ataProviderClass = ExcelDataProvider.class) public void test1(String gameNames, String matchId, String platformId) { //String expected = ""; String params = "gameNames=" + gameNames + "&matchId=" + matchId + "&platformId=" + platformId; //System.out.println(params); } @Test(dataProvider = "GetDataFromXml", dataProviderClass = ExcelDataProvider.class) public void test2(String gameNames, String matchId, String platformId) { //String expected = ""; String params = "gameNames=" + gameNames + "&matchId=" + matchId + "&platformId=" + platformId; //System.out.println(params); } }
相关文章推荐
- JDK和JRE的区别与联系
- CSSOM视图模式(CSSOM View Module)相关整理
- sicily 1558 He is Offside!
- 协议1
- Maven中常用命令简介与区别
- HBase-scan API 通过scan读取表中数据
- VS2010下安装和使用boost库
- asp.net MVC: PagedList + View Model
- 好奇怪的模型和表结构
- 最短路系列
- 定义系统Swith遇到的问题
- Rational Rose 2003 逆向工程转换C++源代码成UML类图
- RMI server不能获取client对象解决
- 深入理解计算机系统-读书笔记(1)
- sicily 1544 Integer Generator
- codeforces 585C题解
- 软件工程、思想(七、八)
- NYOJ 214 单调递增子序列(二)
- Spark stage切分和提交
- 分享:Android Studio 导入第三方jar包,重复加载错误解决办法。