解析Excel,通過Excel驅動測試資料引數化
阿新 • • 發佈:2019-02-13
1.解析Excel:
2.測試方法中呼叫dataProvider,將測試資料引數化:public class ExcelDataProvider implements Iterator<Object[]>{ private Workbook book = null; private Sheet sheet = null; private int rowNum = 0; private int curPhysicalRowNo = 0; private int columnNum = 0; private String[] columnnName; public ExcelDataProvider(String classname, String methodname)throws BiffException, IOException { File directory = new File("."); this.book = Workbook.getWorkbook(new File(directory.getCanonicalPath()+ "\\filepath\\" + classname.replaceAll("\\.", "/") + ".xls")); System.out.println(directory.getCanonicalPath() + "\\filepath\\"+ classname.replaceAll("\\.", "/") + ".xls"); this.sheet = book.getSheet(methodname); this.rowNum = sheet.getRows(); //System.out.println(rowNum); Cell[] c = sheet.getRow(0); /* for(Cell c1:c){ System.out.println(c1.getContents()); }*/ this.columnNum = c.length; //System.out.println(columnNum); columnnName = new String[c.length]; for (int i = 0; i < c.length; i++) { columnnName[i] = c[i].getContents().toString().replace("\n", ""); } this.curPhysicalRowNo++; } @Override public boolean hasNext() { if (this.rowNum == 0 || this.curPhysicalRowNo >= this.rowNum) { try { book.close(); } catch (Exception e) { e.printStackTrace(); } return false; } else return true; } @Override public Object[] next() { Map<String, ArrayList<String>> s = new HashMap<String, ArrayList<String>>(); int RangeRow = 1; boolean ThisIsRange = false; jxl.Range[] ranges = sheet.getMergedCells(); //首先要確定第一列佔了幾行,要區分 Range 還是 Row for (jxl.Range space : ranges) { if (space.getTopLeft().getColumn() == 0 && space.getBottomRight().getColumn() == 0 && space.getTopLeft().getRow() == this.curPhysicalRowNo) { RangeRow = space.getBottomRight().getRow() - space.getTopLeft().getRow() + 1; ThisIsRange = true; break; } } for (int i = 0; i < this.columnNum; i++) { ArrayList<String> temp = new ArrayList<String>(); if (ThisIsRange) { if (i == 0) { temp.add(sheet.getRow(this.curPhysicalRowNo)[i].getContents().toString()); } else { for (int j = 0; j < RangeRow; j++) { temp.add(sheet.getRow(this.curPhysicalRowNo + j)[i].getContents().toString()); } } } else { temp.add(sheet.getRow(this.curPhysicalRowNo)[i].getContents().toString()); } s.put(this.columnnName[i], temp); } Object r[] = new Object[1]; r[0] = s; this.curPhysicalRowNo = this.curPhysicalRowNo + RangeRow; return r; } @Override public void remove() { throw new UnsupportedOperationException("remove unsupported."); } }
方式一:直接定義資料
方式二:@Test(dataProvider = "dp") public void testA(Map<String, ArrayList<String>> data) { System.out.println(data.toString()); System.out.println("------------------"); System.out.print("欄位A:" + data.get("欄位A")); System.out.println(""); System.out.print("欄位B:" + data.get("欄位B")); System.out.println(""); System.out.print("欄位C:" + data.get("欄位C")); System.out.println(""); System.out.print("欄位D:" + data.get("欄位D")); System.out.println(""); System.out.println("*******************"); } @DataProvider(name="dp") public Iterator<Object[]> dataFortestMethod(Method method)throws IOException, BiffException { return new ExcelDataProvider(this.getClass().getName(), method.getName()); }
通過資料持久化層,將Excel中的資料值賦予給變數
資料持久化層:
測試方法中呼叫:public class Enterprise_reporting_demo { public String standardId; public String evaluateDate; public String evaluateMan; public String evaluateJoiner; public Enterprise_reporting_demo(String standardId,String evaluateDate,String evaluateMan,String evaluateJoiner){ this.standardId=standardId; this.evaluateDate=evaluateDate; this.evaluateMan=evaluateMan; this.evaluateJoiner=evaluateJoiner; } }
@Test(dataProvider="dp")
public void test5(Map<String,ArrayList<String>>data){
Enterprise_reporting_demo enterprise_reporting_demo=new Enterprise_reporting_demo(data.get("standardId").get(0), data.get("evaluateDate").get(0), data.get("evaluateMan").get(0), data.get("evaluateJoiner").get(0));
enterprise_reporting.del_Enterprise_reporting(enterprise_reporting_demo);
Assert.assertFalse(enterprise_reporting.del);
}
@DataProvider(name="dp")
public Iterator<Object[]> dataFortestMethod(Method method)throws IOException, BiffException {
return new ExcelDataProvider(this.getClass().getName(), method.getName());
}
注意:Excel檔案的命名應該和測試方法的命名一致,否則會提示:找不到檔案