您是否正在尋找一種把自動(dòng)測試技術(shù)應(yīng)用到 Web 開發(fā)中的方法?那么不用再找了!JWebUnit 是為 Web 應(yīng)用程序創(chuàng)建測試用例的一個(gè)開源框架,它可以容易地插入到大多數(shù) Java IDE 中。通過使用一個(gè)示例應(yīng)用程序,描述了生成簡潔測試用例的詳細(xì)步驟,軟件工程師 Amit Tuli 對(duì) JWebUnit 進(jìn)行了介紹。
自動(dòng)測試可以節(jié)省重復(fù)執(zhí)行相同測試步驟的時(shí)間和精力。本文將介紹 jWebUnit,這是一組 Java 類,用于為 Web 應(yīng)用程序開發(fā)測試用例。jWebUnit 是一個(gè)開源項(xiàng)目,可以在 BSD 許可下免費(fèi)獲得。我將介紹如何下載 JWebUnit 庫、配置 Eclipse 平臺(tái)來開發(fā) jWebUnit 測試用例,以及如何構(gòu)建一個(gè)示例測試用例!
JWebUnit 簡介
JWebUnit 以 HttpUnit(一個(gè)進(jìn)行 Web 應(yīng)用程序自動(dòng)測試的 Java 庫)和 JUnit 單元測試框架為基礎(chǔ)(請(qǐng)參閱 參考資料)。jWebUnit 提供了導(dǎo)航 Web 應(yīng)用程序的高級(jí) API,并組合了一組斷言,用它們來驗(yàn)證鏈接導(dǎo)航、表單輸入項(xiàng)和提交、表格內(nèi)容以及其他典型商務(wù) Web 應(yīng)用程序特性的正確性。 jWebUnit 以 JAR 文件形式提供的,可以很容易地將它插入大多數(shù) IDE 中,jWebUnit 也包含其他必要的庫!
用 HttpUnit 進(jìn)行測試
對(duì) Web 應(yīng)用程序自動(dòng)進(jìn)行測試意味著跳過 Web 瀏覽器,通過程序來處理 Web 站點(diǎn)。首先,我要介紹 HttpUnit(JWebUnit 的構(gòu)建塊之一)是如何簡化這項(xiàng)工作的。HttpUnit 可以模擬幀、javascript、頁面重定向 cookie,等等。在將 HttpUnit 用于 JUnit 時(shí),它可以迅速地對(duì) Web 站點(diǎn)的功能進(jìn)行驗(yàn)證!
清單 1 顯示了一個(gè)用 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 連接,那么可以把這個(gè)語句注釋掉。第 8 行的語句在頁面中搜索包含文本 Cookbook 的 Web 鏈接。第 9 行的語句用于單擊這個(gè)鏈接。如果找到鏈接,那么用戶會(huì)看到 Test Successful !這條消息!
用 JWebUnit 進(jìn)行的測試更簡單
清單 2 的測試用例用 JWebUnit API 執(zhí)行和清單 1 相同的任務(wù):
清單 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)在變得相當(dāng)整潔、簡練。需要查看的重要的行是第 6 行、第 11 行和第 12 行!
在第 6 行,基本 URL 被設(shè)置到 HttpUnit 的主頁中。第 11 行用相對(duì)路徑 /index.html 連接站點(diǎn)。第 12 行用于單擊頁面上具有文本 Cookbook 的鏈接。如果鏈接有效,那么 JUnit 會(huì)報(bào)告成功;否則,JUnit 會(huì)報(bào)告異常。
JWebUnit API:進(jìn)一步觀察
每個(gè) JWebUnit 測試的核心都是 net.sourceforge.jwebunit.WebTestCase 類,它代表測試用例。每個(gè)測試用例都必須是從這個(gè)類擴(kuò)展而來。(net.sourceforge.jwebunit.WebTestCase 類本身則是從 junit.framework.TestCase 類擴(kuò)展而來的,它在 JUnit 中代表測試用例。) 表 1 描述了這個(gè)類的一些常用方法:
表 1. net.sourceforge.jwebunit.WebTestCase 類的重要方法