資料驅動測試之—— Excel+TestNG

tao先生發表於2015-11-06

對於利用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;

    }

}

相關文章