對於利用Webdriver做自動化的童鞋,對於如何將元素或者輸入資料如何和編碼分離都應該不會太陌生,本著一邊學習一邊分享的心態,大概總結了一下關於利用CSV、XML以及Excel來存放資料,然後在結合TestNG來執行資料驅動測試。
需要的Jar包檔案:
poi-3.11-20141221.jar
poi-ooxml-3.11-20141221.jar
poi-ooxml-schemas-3.11-20141221.jar
xmlbeans-2.6.0.jar
下面是關於Excel+TestNG進行資料驅動的程式碼:
package com.util.datadriver; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** * * 利用TestNG和Excel(poi)實現資料的驅動 * * 需要匯入額jar包: poi-3.11-20141221.jar、 poi-ooxml-3.11-20141221.jar、 * poi-ooxml-schemas-3.11-20141221.jar、 xmlbeans-2.6.0.jar */ public class DataProviderExcel { @DataProvider(name = "excelData") public static Object[][] excelData() throws Exception { return getExcelData("date", "excelData.xlsx", "testSheet1"); } @Test(dataProvider = "excelData") public void testExcelData(String input1, String input2, String input3) { System.out.println(input1); System.out.println(input2); System.out.println(input3); } @SuppressWarnings("resource") public static Object[][] getExcelData(String filePath, String fileName, String sheetName) throws Exception { Workbook workbook = null; File file = new File(filePath + "/" + fileName); FileInputStream fis = new FileInputStream(file); String type = fileName.substring(fileName.indexOf(".")); // Excel2007 以後的格式為.xlsx的Excel檔案,需要呼叫XSSFWorkbook // Excel2007以前版本的格式為.xls的Excel檔案,需要呼叫HSSFWorkbook if (type.equals(".xlsx")) { workbook = new XSSFWorkbook(fis); } else if (type.equals(".xls")) { workbook = new HSSFWorkbook(fis); } Sheet sheet = workbook.getSheet(sheetName); // 獲得最後一行的行數 int lastRowCount = sheet.getLastRowNum(); // 獲得第一行的行數 int firstRowCount = sheet.getFirstRowNum(); // Excel行數從第0行開始 int sumRowCount = lastRowCount - firstRowCount + 1; List<Object[]> list = new ArrayList<Object[]>(); // 獲取每行的行物件,第一行為資訊欄,不計入,所以從1開始 for (int i = 1; i < sumRowCount; i++) { Row row = sheet.getRow(i); // 獲得一行中最後單元格的count int lastCellCount = row.getLastCellNum(); // 定義一個陣列來存放cell中值,根據cell的長度來定義陣列的長度 String[] fileds = new String[lastCellCount]; for (int j = 0; j < lastCellCount; j++) { String cellValue = row.getCell(j).getStringCellValue(); fileds[j] = cellValue; } list.add(fileds); } fis.close(); // 定義一個object[][] 的二維陣列,存放list中的值 Object[][] results = new Object[list.size()][]; // 設定二維陣列每行的值, for (int a = 0; a < list.size(); a++) { results[a] = list.get(a); } return results; } }