軟件測試中使用HttpUnit進行集成測試
[內容摘要] HttpUnit是一個集成測試工具,主要關注Web應用的測試,提供的幫助類讓測試者可以通過Java類和服務器進行交互,并且將服務器端的響應當作文本或者DOM對象進行處理。HttpUnit還提供了一個模擬Servlet容器,讓你可以不需要發布Servlet,就可以對Servlet的內部代碼進行測試。本文中作者將詳細的介紹如何使用HttpUnit提供的類完成集成測試。
關鍵詞: httpunit 集成測試
1 HttpUnit簡介
HttpUnit是SourceForge下面的一個開源項目,它是基于JUnit的一個測試框架,主要關注于測試Web應用,解決使用JUnit框架無法對遠程Web內容進行測試的弊端。當前的最新版本是1.5.4。為了讓HtpUnit正常運行,你應該安裝JDK1.3.1或者以上版本。
1.1 工作原理
HttpUnit通過模擬瀏覽器的行為,處理頁面框架(frames),cookies,頁面跳轉(redirects)等。通過HttpUnit提供的功能,你可以和服務器端進行信息交互,將返回的網頁內容作為普通文本、XML Dom對象或者是作為鏈接、頁面框架、圖像、表單、表格等的集合進行處理,然后使用JUnit框架進行測試,還可以導向一個新的頁面,然后進行新頁面的處理,這個功能使你可以處理一組在一個操作鏈中的頁面。
1.2 和其他商業工具的對比
商業工具一般使用記錄、回放的功能來實現測試,但是這里有個缺陷,就是當頁面設計被修改以后,這些被記錄的行為就不能重用了,需要重新錄制才能繼續測試。
舉個例子:如果頁面上有個元素最先的設計是采用單選框,這個時候你開始測試,那么這些工具記錄的就是你的單項選擇動作,但是如果你的設計發生了變化,比如說我改成了下拉選擇,或者使用文本框接受用戶輸入,這時候,你以前錄制的測試過程就無效了,必須要重新錄制。
而HttpUnit因為關注點是這些控件的內容,所以不管你的外在表現形式如何變化,都不影響你已確定測試的可重用性。
更多的關于httpunit的信息請訪問httpunit的主頁 http://httpunit.sourceforge.net/
2 作者的演示環境
系統平臺:Windows 2000 Sercver
應用服務器:深圳金蝶的apusic3.0
開發工具: eclipse 2.1.2
說明: 所有的代碼請下載作者提供的code.jar文件。
3 HttpUnit安裝、環境配置
3.1 安裝
1. 到HttpUnit的主頁 http://httpunit.sourceforge.net 下載最新的包文件,當前的最新版本是1.5.4。/
2. 將下載。Zip包解壓縮到c:/httpunit(后面將使用%httpunit_home%引用該目錄)
3.2 環境配置
作者的演示程序都是在eclipse中開發、執行的,所以環境配置都是以eclipse為例,如果你使用其他的開發工具,請根據這些步驟進行環境配置。
1. 啟動eclipse,建立一個java工程
2. 將%httpunit_home%/lib/*.jar; %httpunit_home%/jars/*.jar加入到該java工程的Java build Path變量中
4 如何使用httpunit處理頁面的內容
WebConversation類是HttpUnit框架中最重要的類,它用于模擬瀏覽器的行為。其他幾個重要的類是:
WebRequest 模仿客戶請求,通過它可以向服務器發送信息
WebResponse 模擬瀏覽器獲取服務器端的響應信息
4.1 獲取指定頁面的內容
4.1.1 直接獲取頁面內容
System.out.println("直接獲取網頁內容:"); // 建立一個WebConversation實例 WebConversation wc = new WebConversation(); // 向指定的URL發出請求,獲取響應 WebResponse wr = wc.getResponse( " http://localhost:6888/HelloWorld.html " ); // 用getText方法獲取相應的全部內容 // 用System.out.println將獲取的內容打印在控制臺上 System.out.println( wr.getText() ); |
4.1.2 通過Get方法訪問頁面并且加入參數
System.out.println("向服務器發送數據,然后獲取網頁內容:");
//建立一個WebConversation實例 //用getText方法獲取相應的全部內容 |
4.1.3 通過Post方法訪問頁面并且加入參數
System.out.println("使用Post方式向服務器發送數據,然后獲取網頁內容:");
//建立一個WebConversation實例 //用getText方法獲取相應的全部內容 |
大家關注一下上面代碼中打了下劃線的兩處內容,應該可以看到,使用Get、Post方法訪問頁面的區別就是使用的請求對象不同。
4.2 處理頁面中的鏈接
這里的演示是找到頁面中的某一個鏈接,然后模擬用戶的單機行為,獲得它指向文件的內容。比如在我的頁面HelloWorld.html中有一個鏈接,它顯示的內容是TestLink,它指向我另一個頁面TestLink.htm. TestLink.htm里面只顯示TestLink.html幾個字符。
下面是處理代碼:
//用getText方法獲取相應的全部內容 |
4.3 處理頁面中的表格
表格是用來控制頁面顯示的常規對象,在HttpUnit中使用數組來處理頁面中的多個表格,你可以用resp.getTables()方法獲取頁面所有的表格對象。他們依照出現在頁面中的順序保存在一個數組里面。
[注意] Java中數組下標是從0開始的,所以取第一個表格應該是resp.getTables()[0],其他以此類推。
下面的例子演示如何從頁面中取出第一個表格的內容并且將他們循環顯示出來:
System.out.println("獲取頁面中表格的內容:");
//建立一個WebConversation實例 WebConversation wc = new WebConversation(); //獲取響應對象 WebResponse resp = wc.getResponse( " http://localhost:6888/HelloWorld.html " ); //獲得對應的表格對象 WebTable webTable = resp.getTables()[0]; //將表格對象的內容傳遞給字符串數組 String[][] datas = webTable.asText(); //循環顯示表格內容 int i = 0 ,j = 0; int m = datas[0].length; int n = datas.length; while (i<n){ j=0; while(j<m){ System.out.println("表格中第"+(i+1)+"行第"+(j+1)+"列的內容是:"+datas[j]); ++j; } ++i; } |
文章來源于領測軟件測試網 http://www.k11sc111.com/