1. 程式人生 > >Java 使用POI操作EXCEL及測試框架搭建、測試開發的一些想法

Java 使用POI操作EXCEL及測試框架搭建、測試開發的一些想法

無論是UI自動化測試還是介面自動化測試都需要進行資料驅動,一般很常見的一種方式就是用excel來管理資料,那麼就涉及到一些程式碼對EXCEL的操作,之前我們介紹過用CSV來處理EXCEL,但是它的功能還不夠強大。比如介面自動化測試框架搭建的時候我們用excel來進行資料驅動,用excel來進行用例的管理和測試結果的統計,那麼我們就需要對excel進行讀取,寫入等編輯操作,如果做的更加全面的話還要對測試結果進行個統計。

     先來談下如何用excel來進行資料驅動吧。以我們公司的介面自動化測試框架為例,我們用excel來進行輸入設計及輸出對比,input表是請求輸入資料,ouput表是期望輸出資料,result表是實際輸出結果,可以對這些用例進行相應地處理更直觀的看到測試結果。

     在這裡還想談下介面測試框架的搭建問題,之前也一直在論壇上看一些大神的框架設計,從技術層面上來講涉及到的技術都是大同小異的,基本上都是用相關語言的一些測試框架加上一些資料解析,斷言,資料請求。我認為介面測試框架的搭建,亦或者是UI自動化測試框架的搭建都是從需求出發,從專案本身出發去考慮如何搭建的,並不是從技術角度出發,不能說我做自動化測試做介面測試就要用這些技術搭建框架,要看專案本身的特點,看整體專案開發測試規範需要做到什麼程度,再去考慮是否需要搭建框架。因為本身介面測試就由許多工具可以滿足測試需要,如果說本身專案不會涉及到一些特殊需求,例如:

     1.是否考慮特殊加密

     2.是否考慮介面重複執行資料清理等問題(工具的話都是需要人工手動去處理測試資料的)

     3.是否考慮測試批量執行,測試報告生成及郵件傳送問題

     4.是否考慮持續整合等問題

     我認為當考慮了這些問題的時候才需要再去考慮搭建框架進行測試,而不是有了介面測試任務就各種技術各種查的去搭框架。自己有這種感想的原因也是在學習各種各樣的測試技術,介面啊,效能啊,自動化啊等等之後,發現在實際的專案中是不一定都會用到的,那麼我們學習這些技術的意義是什麼呢?為了找工作加薪嗎,是有這方面原因的。但是我認為還是應該回到測試工程師這個職位本職上來,我們的任務是什麼,我越來越從思想上跳出測試者的禁錮,我希望我以後所學習的東西都是以軟體質量管理質量控制為主,而不是各種各樣的技術去堆砌,到最後發現掌握各種各樣的技術卻不知道怎麼去測試,怎麼當一名合格的測試,一名合格的QA。雖然自己會一直加強技術的學習,往測試開發方向發展,但是自己從思想深處還是堅定一下自己的定位,無論是測試,QA,測試開發,所做的所有工作應該是保證系統軟體的質量,亦或者能在質量把控的工作上提供相應地技術支援,提供測試效率,輔助開發提高開發效率及質量,我想這才是測試應該做的工作,而不是一味的學習技術往開發靠攏來提高自己的市場競爭力。

     好了廢話不多說,簡單地POI建立,讀取,修改寫入小Demo記錄下:

package 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();
            }
        }
    }
}
轉自:http://www.cnblogs.com/dreamyu/p/6947716.html