您是否正在尋找一種把自動測試技術應用到 Web 開發(fā)中的方法?那么不用再找了!JWebUnit 是為 Web 應用程序創(chuàng)建測試用例的一個開源框架,它可以容易地插入到大多數(shù) Java IDE 中。通過使用一個示例應用程序,描述了生成簡潔測試用例的詳細步驟,軟件工程師 Amit Tuli 對 JWebUnit 進行了介紹!
自動測試可以節(jié)省重復執(zhí)行相同測試步驟的時間和精力。本文將介紹 jWebUnit,這是一組 Java 類,用于為 Web 應用程序開發(fā)測試用例。jWebUnit 是一個開源項目,可以在 BSD 許可下免費獲得。我將介紹如何下載 JWebUnit 庫、配置 Eclipse 平臺來開發(fā) jWebUnit 測試用例,以及如何構建一個示例測試用例!
JWebUnit 簡介
JWebUnit 以 HttpUnit(一個進行 Web 應用程序自動測試的 Java 庫)和 JUnit 單元測試框架為基礎(請參閱 參考資料)。jWebUnit 提供了導航 Web 應用程序的高級 API,并組合了一組斷言,用它們來驗證鏈接導航、表單輸入項和提交、表格內(nèi)容以及其他典型商務 Web 應用程序特性的正確性。 jWebUnit 以 JAR 文件形式提供的,可以很容易地將它插入大多數(shù) IDE 中,jWebUnit 也包含其他必要的庫!
用 HttpUnit 進行測試
對 Web 應用程序自動進行測試意味著跳過 Web 瀏覽器,通過程序來處理 Web 站點。首先,我要介紹 HttpUnit(JWebUnit 的構建塊之一)是如何簡化這項工作的。HttpUnit 可以模擬幀、javascript、頁面重定向 cookie,等等。在將 HttpUnit 用于 JUnit 時,它可以迅速地對 Web 站點的功能進行驗證!
清單 1 顯示了一個用 HttpUnit 編寫的測試用例,它試圖單擊 HttpUnit 主頁上的“Cookbook”鏈接:
清單 1. 單擊 HttpUnit 主頁上 Cookbook 鏈接的 HttpUnit 代碼
1 public class HttpUnitTest {
2 public static void main(String[] args) {
3 try {
4 WebConversation wc = new WebConversation();
5 WebRequest request =
new GetMethodWebRequest("http://httpunit.sourceforge.net/index.html");
6 wc.setProxyServer( "your.proxy.com", 80 );
7 WebResponse response = wc.getResponse(request);
8 WebLink httpunitLink =
response.getFirstMatchingLink(WebLink.
MATCH_CONTAINED_TEXT,"Cookbook");
9 response = httpunitLink.click();
10 System.out.println("Test successful !!");
11 } catch (Exception e) {
12 System.err.println("Exception: " + e);
13 }
14 }
15 }
清單 1 中的代碼用 your.proxy.com (第 6 行)連接 Internet。如果存在直接 Internet 連接,那么可以把這個語句注釋掉。第 8 行的語句在頁面中搜索包含文本 Cookbook 的 Web 鏈接。第 9 行的語句用于單擊這個鏈接。如果找到鏈接,那么用戶會看到 Test Successful !這條消息。
用 JWebUnit 進行的測試更簡單
清單 2 的測試用例用 JWebUnit API 執(zhí)行和清單 1 相同的任務:
清單 2. 單擊 HttpUnit 主頁上 Cookbook 鏈接的 JWebUnit 代碼
1 public class JWebUnitTest extends WebTestCase{
2 public static void main(String[] args){
3 junit.textui.TestRunner.run(new TestSuite(JWebUnitTest.class));
4 }
5 public void setUp(){
6 getTestContext().setBaseUrl("http://httpunit.sourceforge.net");
7 getTestContext().setProxyName("webproxy.watson.ibm.com");
8 getTestContext().setProxyPort(8080);
9 }
10 public void testSearch(){
11 beginAt("/index.html");
12 clickLinkWithText("Cookbook");
13 }
14 }
如果沒注意清單 2 中特定于 JUnit 的代碼,那么您可以看到,測試用例現(xiàn)在變得相當整潔、簡練。需要查看的重要的行是第 6 行、第 11 行和第 12 行!
在第 6 行,基本 URL 被設置到 HttpUnit 的主頁中。第 11 行用相對路徑 /index.html 連接站點。第 12 行用于單擊頁面上具有文本 Cookbook 的鏈接。如果鏈接有效,那么 JUnit 會報告成功;否則,JUnit 會報告異常!
JWebUnit API:進一步觀察
每個 JWebUnit 測試的核心都是 net.sourceforge.jwebunit.WebTestCase 類,它代表測試用例。每個測試用例都必須是從這個類擴展而來。(net.sourceforge.jwebunit.WebTestCase 類本身則是從 junit.framework.TestCase 類擴展而來的,它在 JUnit 中代表測試用例。) 表 1 描述了這個類的一些常用方法:
表 1. net.sourceforge.jwebunit.WebTestCase 類的重要方法