測試驅(qū)動技術(shù)(TDD)系列之:操控excel的核心api
在前面的文章講解利用TestNG進(jìn)行數(shù)據(jù)驅(qū)動:測試驅(qū)動技術(shù)(TDD)系列之2:詳解TestNG參數(shù)化
測試數(shù)據(jù)格式展示如下(junit4也類似):
- @DataProvider
- public Object[][] dp1() {
- return new Object[][] {
- new Object[] { 1, 1,0 },
- new Object[] { 2, 1,1 },
- new Object[] { 2, 1,2 },
- };
- }
大家可以看到,如果數(shù)據(jù)量不大的時候,這種形式是OK的,但是如果測試數(shù)據(jù)量很大,那么在代碼中維護(hù)測試數(shù)據(jù)顯然效率就不高了!在做數(shù)據(jù)驅(qū)動的工作中,通常把測試數(shù)據(jù)保存在excel中,然后再對excel進(jìn)行讀寫相關(guān)操作。在這里以java為例,我?guī)Т蠹沂煜ひ幌聀oi-ooxml jar包的使用,給大家講解一下這個jar包操控excel的核心api。
poi-ooxml jar介紹
jar包導(dǎo)入
Maven中的pom配置信息如下
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-ooxml</artifactId>
- <version>4.1.2</version>
- </dependency>
首先介紹幾個概念,整個excel文件被稱作workbook、每個工作表被稱作Sheet,每個單元格被稱作cell

api詳解
打開xlsx格式文檔
- XSSFWorkbookworkbook = new XSSFWorkbook(new FileInputStream("E:\\test.xlsx"));
打開xls格式文檔
- HSSFWorkbookworkbook = new HSSFWorkbook(newFileInputStream("E:\\test.xls"));
關(guān)閉文檔
- workbook.close();
通過id獲取工作表,0表示第一個工作表
- Sheet sheet =workbook.getSheetAt(0);
通過工作表名稱獲取工作表
- Sheet sheet =workbook.getSheet("test1");
創(chuàng)建sheet,名命為test2
- workbook.createSheet("test2");
創(chuàng)建sheet,名命為test3,并把第一個sheet中的值拷貝過去
- workbook.cloneSheet(0,"test3");
獲取sheet中的有效數(shù)據(jù)行數(shù)
- int iRowNum=sheet.getPhysicalNumberOfRows();
獲取sheet中的有效數(shù)據(jù)列數(shù)
- int iColumnNum=sheet.getRow(0).getPhysicalNumberOfCells();
獲取第一列第一行的數(shù)據(jù)類型
- CellTypetype=sheet.getRow(1).getCell(0).getCellType();
Cell的數(shù)據(jù)類型包括:
- NUMERIC,數(shù)值型
- STRING,字符串型
- FORMULA,公式型
- BLANK,空值
- BOOLEAN,布爾型
- ERROR,錯誤
獲取第一列第一行的數(shù)據(jù)值
- String value=sheet.getRow(1).getCell(0).getStringCellValue();
把第一列第一行的數(shù)據(jù)設(shè)置為kevin1
- sheet.getRow(1).getCell(0).setCellValue("kevin1");
注意:如果涉及到對excel的寫入操作或者創(chuàng)建sheet表格的操作,例如:
- workbook.createSheet("test2");
- workbook.cloneSheet(0,"test3");
- sheet.getRow(1).getCell(0).setCellValue("kevin1");
必須添加下面三條語句
- FileOutputStreamis = new FileOutputStream("E:\\test.xls");
- workbook.write(is);
- is.close();
完整代碼
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.ss.usermodel.CellType;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- public class ExcelBaseDemo {
- public static void main(String[] args) throws FileNotFoundException, IOException {
- //XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream("E:\\test.xlsx")); //打開xlsx格式
- HSSFWorkbookworkbook = new HSSFWorkbook(new FileInputStream("E:\\test.xls"));//打開xls格式
- // 獲取工作表
- //Sheet sheet = workbook.getSheetAt(0);
- Sheetsheet = workbook.getSheet("test1");
- // workbook.createSheet("test2");
- //創(chuàng)建sheet,名命為test2
- // workbook.cloneSheet(0, "test3");
- //創(chuàng)建sheet,名命為test3,并把第一個sheet中的值拷貝過去
- int iRowNum=sheet.getPhysicalNumberOfRows(); //獲取sheet中的有效數(shù)據(jù)行數(shù)
- int iColumnNum= sheet.getRow(0).getPhysicalNumberOfCells();//獲取sheet中的有效數(shù)據(jù)列數(shù)
- System.out.println(iRowNum);
- System.out.println(iColumnNum);
- CellTypetype=sheet.getRow(1).getCell(0).getCellType(); //獲取第一列第一行的數(shù)據(jù)類型
- System.out.println(type);
- Stringvalue= sheet.getRow(1).getCell(0).getStringCellValue(); //獲取第一列第一行的數(shù)據(jù)值
- System.out.println(value);
- sheet.getRow(1).getCell(0).setCellValue("kevin1"); //把第一列第一行的數(shù)據(jù)設(shè)置為kevin1
- //如果涉及到對excel的寫入操作或者創(chuàng)建sheet表格的操作,必須添加下面三條語句
- FileOutputStreamis = new FileOutputStream("E:\\test.xls");
- workbook.write(is);
- is.close();
- workbook.close();
- }
- }
好了,使用java操控excel 的方法就介紹到這里,大家可以考慮一下利用上面的知識,如何在測試框架中(TestNG\Junit4)實現(xiàn)測試數(shù)據(jù)在excel中調(diào)用的操作呢?在這里我先挖一個坑,下篇文章里會自己填坑,給大家完整的代碼,請大家持續(xù)關(guān)注!