1. 程式人生 > >httpUnit介紹及使用示例

httpUnit介紹及使用示例

內容摘要

HttpUnit是一個整合測試工具,主要關注Web應用的測試,提供的幫助類讓測試者可以通過Java類和伺服器進行互動,並且將伺服器端的響應當作文字或者DOM物件進行處理。HttpUnit還提供了一個模擬Servlet容器,讓你可以不需要釋出Servlet,就可以對Servlet的內部程式碼進行測試。本文中作者將詳細的介紹如何使用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因為關注點是這些控制元件的內容,所以不管你的外在表現形式如何變化,都不影響你已確定測試的可重用性。

舉例:

import org.junit.Assert;

import org.junit.Test;

import com.meterware.httpunit.GetMethodWebRequest;

import com.meterware.httpunit.WebRequest;

import com.meterware.httpunit.WebResponse;

public class DataSourceResourceTest extends ServletTest {

  private static final String REQUST_URL = "http://www.meterware.com/rest/xxx/admin/datasources";

  private static final String DATASOURCE = "TestConnection1";

  @Test

  public void testGetDataSources() {

    try {

      WebRequest wr = new GetMethodWebRequest(REQUST_URL);

      WebResponse response = runner.getResponse(wr);

      Assert.assertEquals(SUCCEED_200, response.getResponseCode());

      printResponseInfo(response);

    } catch (Exception e) {

      Assert.fail("Get datasource failed!");

    }

  }

  @Test

  public void testCreateEmptyQuery(){

    try {

      WebRequest wr = new PostMethodWebRequest(REQUST_URL+"/"+QUERY_NAME);

      wr.setParameter("connection", "TestConnection1");

      wr.setParameter("catalog", "FoodMart");

      wr.setParameter("schema", "FoodMart");

      wr.setParameter("cube", "Store");

      wr.setParameter("xml", "");

      WebResponse response = runner.getResponse(wr);

      Assert.assertEquals(SUCCEED_200, response.getResponseCode());

      printResponseInfo(response);

    } catch (Exception e) {

      Assert.fail("Create empty query failed!");

    }

  }

}