Java 使用POI操作EXCEL及測試框架搭建、測試開發的一些想法
先來談下如何用excel來進行資料驅動吧。以我們公司的介面自動化測試框架為例,我們用excel來進行輸入設計及輸出對比,input表是請求輸入資料,ouput表是期望輸出資料,result表是實際輸出結果,可以對這些用例進行相應地處理更直觀的看到測試結果。
在這裡還想談下介面測試框架的搭建問題,之前也一直在論壇上看一些大神的框架設計,從技術層面上來講涉及到的技術都是大同小異的,基本上都是用相關語言的一些測試框架加上一些資料解析,斷言,資料請求。我認為介面測試框架的搭建,亦或者是UI自動化測試框架的搭建都是從需求出發,從專案本身出發去考慮如何搭建的,並不是從技術角度出發,不能說我做自動化測試做介面測試就要用這些技術搭建框架,要看專案本身的特點,看整體專案開發測試規範需要做到什麼程度,再去考慮是否需要搭建框架。因為本身介面測試就由許多工具可以滿足測試需要,如果說本身專案不會涉及到一些特殊需求,例如:
1.是否考慮特殊加密
2.是否考慮介面重複執行資料清理等問題(工具的話都是需要人工手動去處理測試資料的)
3.是否考慮測試批量執行,測試報告生成及郵件傳送問題
4.是否考慮持續整合等問題
我認為當考慮了這些問題的時候才需要再去考慮搭建框架進行測試,而不是有了介面測試任務就各種技術各種查的去搭框架。自己有這種感想的原因也是在學習各種各樣的測試技術,介面啊,效能啊,自動化啊等等之後,發現在實際的專案中是不一定都會用到的,那麼我們學習這些技術的意義是什麼呢?為了找工作加薪嗎,是有這方面原因的。但是我認為還是應該回到測試工程師這個職位本職上來,我們的任務是什麼,我越來越從思想上跳出測試者的禁錮,我希望我以後所學習的東西都是以軟體質量管理質量控制為主,而不是各種各樣的技術去堆砌,到最後發現掌握各種各樣的技術卻不知道怎麼去測試,怎麼當一名合格的測試,一名合格的QA。雖然自己會一直加強技術的學習,往測試開發方向發展,但是自己從思想深處還是堅定一下自己的定位,無論是測試,QA,測試開發,所做的所有工作應該是保證系統軟體的質量,亦或者能在質量把控的工作上提供相應地技術支援,提供測試效率,輔助開發提高開發效率及質量,我想這才是測試應該做的工作,而不是一味的學習技術往開發靠攏來提高自己的市場競爭力。
好了廢話不多說,簡單地POI建立,讀取,修改寫入小Demo記錄下:
轉自:http://www.cnblogs.com/dreamyu/p/6947716.htmlpackage com.javaPOI; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; 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.ss.usermodel.WorkbookFactory; public class POITest { public static void main(String[] args) { // TODO Auto-generated method stub POITest.createExcel(); //POITest.readExcel(); POITest.writeToExcel(); Map<String, String> student = new HashMap<String, String>(); student.put("名字", "小明"); student.put("性別", "男"); student.put("住址", "地球"); student.put("成績", "良好"); String filePath = "/Users/macbookpro/Desktop/POITest/workbook.xls"; POITest.writeToExcel(filePath, student, "new sheet"); } public static void createExcel() { //建立工作表 Workbook wbook = new HSSFWorkbook(); //建立sheet頁 Sheet sh = wbook.createSheet("new sheet"); //row 行 cell方格 Row row1 = sh.createRow(0); //建立cell Cell cell = row1.createCell(0); //設定方格顯示 cell.setCellValue("姓名"); row1.createCell(1).setCellValue("性別"); row1.createCell(2).setCellValue("住址"); //建立檔案 FileOutputStream fos = null; try { fos = new FileOutputStream("/Users/macbookpro/Desktop/POITest/workbook.xls"); wbook.write(fos); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); }finally{ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void readExcel() { InputStream ips = null; try { //獲取檔案輸入流 ips = new FileInputStream("/Users/macbookpro/Desktop/POITest/workbook.xls"); //根據輸入流建立workbook物件 Workbook wbook = WorkbookFactory.create(ips); //得到第一個sheet頁 Sheet sh1 = wbook.getSheetAt(0); //遍歷行 for (Row row : sh1) { for (Cell cell : row) { System.out.print(cell.toString()+" "); } } } catch (Exception e) { e.printStackTrace(); } finally{ try { ips.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void writeToExcel() { OutputStream ops = null; InputStream ips = null; try { ips = new FileInputStream("/Users/macbookpro/Desktop/POITest/workbook.xls"); //根據輸出流建立workbook物件 Workbook wbook = WorkbookFactory.create(ips); //獲取sheet頁 Sheet sh = wbook.getSheetAt(0); for (Row row : sh) { for (Cell cell : row) { String str = cell.toString(); //把姓名改成名字 if (str.equals("姓名")) { cell.setCellValue("名字"); } } //新增一個欄位 row.createCell(3).setCellValue("成績"); } ops = new FileOutputStream("/Users/macbookpro/Desktop/POITest/workbook.xls"); wbook.write(ops); } catch (Exception e) { e.printStackTrace(); } finally{ try{ ops.close(); ips.close(); }catch(Exception e){ e.printStackTrace(); } } } public static void writeToExcel(String filePath,Map<String, String>student,String sheetName) { OutputStream ops = null; InputStream ips = null; try { ips = new FileInputStream(new File(filePath)); Workbook wbook = WorkbookFactory.create(ips); Sheet sh = wbook.getSheet(sheetName); //獲得sheet行數 加1 int shRowCount = sh.getLastRowNum()+1; System.out.println(shRowCount); //獲得表頭列數 int shColumn = sh.getRow(0).getLastCellNum(); System.out.println(shColumn); Row titleRow = sh.getRow(0); //新增一行 Row newRow = sh.createRow(shRowCount); for (int i = 0; i < shColumn; i++) { //獲取列名 String columnStr = titleRow.getCell(i).toString(); System.out.println(columnStr); newRow.createCell(i).setCellValue(student.get(columnStr)); } ops = new FileOutputStream(new File(filePath)); wbook.write(ops); } catch (Exception e) { e.printStackTrace(); } finally{ try{ ops.close(); ips.close(); }catch(Exception e){ e.printStackTrace(); } } } }