Watij:面向Web的自動(dòng)化測試工具
隨著軟件產(chǎn)業(yè)的不斷成熟,軟件質(zhì)量保證越來越受軟件企業(yè)重視,被視為軟件企業(yè)的生命。軟件測試作為軟件質(zhì)量保證中的一個(gè)重要手段,它直接關(guān)系到軟件的質(zhì)量、開發(fā)周期和開發(fā)成本,受到越來越大的重視,被貫穿在軟件的整個(gè)開發(fā)和維護(hù)的生命周期。作為軟件測試的一個(gè)重要分支,軟件自動(dòng)化測試正以其自動(dòng)化程度高、實(shí)用性強(qiáng)、測試效率高等不可取代的優(yōu)點(diǎn),引起了測試技術(shù)人員的廣泛關(guān)注,成為軟件測試的方向。層出不窮的軟件自動(dòng)化測試技術(shù)及軟件自動(dòng)化測試框架正在被人們廣泛的開發(fā)和利用,在軟件測試自動(dòng)化中發(fā)揮著突出的作用。而選取何種自動(dòng)化測試的方案也隨之產(chǎn)生,測試人員更加需要一個(gè)功能強(qiáng)大且簡單易用的自動(dòng)化測試工具,輔助測試人員搭建測試框架,設(shè)計(jì)自動(dòng)測試程序,而又盡可能減少自動(dòng)化測試程序的開發(fā)和維護(hù)成本。本文所要介紹的 Watij(Web Application Testing in Java)是一個(gè)優(yōu)秀的開源工具,用于開發(fā)基于 Web 應(yīng)用的自動(dòng)化測試程序。它使用 Java 語言,提供了輕量級(jí)的自動(dòng)化測試程序框架和豐富的程序開發(fā)庫,有效地加速了自動(dòng)化測試程序開發(fā)。
Watij 的簡介
本節(jié)首先簡要地介紹了 Watij 的一些主要功能及特點(diǎn),其次介紹了 Watij 的安裝及配置流程。
Watij 的簡介
隨著 Web 產(chǎn)品的廣泛應(yīng)用,新的模式解決方案中以 Web 為核心的應(yīng)用也越來越多,很多公司的架構(gòu)都采取 B/S 模式,以及對(duì)于 Web 的應(yīng)用,所以對(duì) Web 產(chǎn)品的測試就顯得越來越重要,如何對(duì) Web 產(chǎn)品進(jìn)行自動(dòng)化測試成為當(dāng)今社會(huì)研究的熱點(diǎn)問題之一。
Web 的測試方法應(yīng)盡量涵蓋 Web 程序的各個(gè)方面,測試技術(shù)方面也應(yīng)在繼承傳統(tǒng)測試的基礎(chǔ)上結(jié)合 Web 產(chǎn)品的應(yīng)用特點(diǎn)。本文介紹了一種新的基于 Web 的自動(dòng)化測試工具 - Watij。Watij 是 Web Application Testing in Java 的縮寫。Watij 是一個(gè)使用 Java 編程語言實(shí)現(xiàn)的開源自動(dòng)化測試框架,它相比于其他的自動(dòng)化測試框架,具有小巧,靈活等特點(diǎn)。Watij 也提供了強(qiáng)大的功能,可以滿足自動(dòng)化測試人員的各個(gè)方面的需要。
運(yùn)用 Watij 的自動(dòng)化測試框架可以使自動(dòng)化開發(fā)人員利用 Java 編程語言對(duì)產(chǎn)品進(jìn)行自動(dòng)化測試腳本的開發(fā)。Watij 擁有較為便捷的開發(fā)模式,Watij 提供了豐富的開發(fā)庫,封裝了包括瀏覽器窗口 windows,button,link,,dialog,image,table,div 等絕大多數(shù) HTML 對(duì)象類型,方便測試人員快速構(gòu)建自動(dòng)化測試程序。 同時(shí),它提供了大量的應(yīng)用方法以及應(yīng)用接口,這些應(yīng)用接口函數(shù)幾乎包括了所有對(duì)于網(wǎng)頁操作的方法。開發(fā)人員可以調(diào)用這些方法方便地對(duì)其進(jìn)行使用。另外,Watij 具有高效、快速等特點(diǎn),開發(fā)人員只需要運(yùn)用提供的方法編寫測試腳本并執(zhí)行改腳本,在測試運(yùn)行過程中就如同真實(shí)的用戶在操作一樣,使自動(dòng)化測試工作幾乎模擬人的手工測試一樣。應(yīng)用基于 Watij 的自動(dòng)化測試框架能夠使自動(dòng)化腳本的開發(fā)變得更為簡單而且更具有實(shí)用性。
Watij 的安裝及配置
為了能夠更為詳實(shí)的說明 Watij 自動(dòng)化測試框架,下面將要介紹 Watij 的安裝及配置過程,使開發(fā)人員能夠更為快捷便利地使用 Watij 這套自動(dòng)化測試框架進(jìn)行自動(dòng)化的測試工作。
◆ 軟件安裝包,并進(jìn)行解壓。
◆ Watij_release_3.2.1 的下載地址:http://sourceforge.net/projects/Watij/files/
◆ 將文件中的 jniwrap.dll 拷到 C:\windows\system32\ 目錄下。
◆ 打開一個(gè) Java IDE(如 Eclipse), 并創(chuàng)建一個(gè)新的工程。
◆ 將 Watij.jar 以及 lib 目錄下的所有 jar 包都加載到工程的 classpath 中,如圖 1 所示。
添加jar 包的具體操作步驟如下:
依次打開 New->Project,選擇“Java Project”,點(diǎn)擊“Next”;
“Project Name”中輸入“Watij”,點(diǎn)擊“Next”;
在“Java Settings”中選擇“Libraries”的選項(xiàng),點(diǎn)擊“Add External JARs”;
添加“Watij.jar”和 lib 目錄下的所有 jar,點(diǎn)擊“Finish”。
創(chuàng)建 JUnit TestCase,并確保包含這句話“import static Watij.finders.SymbolFactory.\*;”
圖 1. 導(dǎo)入 jar 包示意圖

首先本節(jié)介紹了 Watij 的應(yīng)用方法,然后通過一個(gè)具體的應(yīng)用實(shí)例來介紹 Watij 的使用。由于 Watij 目前只對(duì) IE 瀏覽器有較好的支持,故以下涉及的內(nèi)容都是以 Windows 平臺(tái)為例,此外,RFT(Rational Functional Tester)是一款先進(jìn)的、自動(dòng)化的功能和回歸測試工具,它適用于測試人員和 GUI 開發(fā)人員,故本文采用 RFT 作為 Watij 的 Java IDE 進(jìn)行描述的;而后文章簡單地介紹 Watij BeanShell 的使用方法;***本節(jié)對(duì) Watij 和 Selenium 這兩個(gè)目前較為流行地自動(dòng)化測試框架進(jìn)行簡要的比較與說明,說明了兩者的區(qū)別與聯(lián)系,以及這兩者的各自的應(yīng)用范圍及應(yīng)用領(lǐng)域,說明了在何種情況下應(yīng)用那款自動(dòng)化測試框架才會(huì)使其發(fā)揮更大的作用。
Watij 的應(yīng)用方法
首先簡要介紹 Watij 的功用。Watij 可以驅(qū)動(dòng) HTML 在瀏覽器上的 Web 應(yīng)用,它不需要像 Active X、JavaApplets、Macromedia Flash 等類似的插件服務(wù)一樣。
在基于 Web 的自動(dòng)化測試中,如何獲取網(wǎng)頁對(duì)象屬性是開發(fā) GUI 自動(dòng)化測試程序的關(guān)鍵步驟。由于 Watij 本身沒有提供類似于 RFT 中 Object Capture 的對(duì)象捕捉器,但在 Watij 程序的開發(fā)中,我們可以使用一些第三方提供的運(yùn)行在瀏覽器端的 HTML 查看器,進(jìn)行網(wǎng)頁對(duì)象的獲取,以便查看網(wǎng)頁的結(jié)構(gòu)和對(duì)象的屬性,這樣將使我們的開發(fā)工作變得更為方便。對(duì)于 IE 瀏覽器,可安裝 Microsoft IE Explorer Develop Toolbar,如果用戶使用的 IE 瀏覽器的版本在 8.0 以上,也可以通過點(diǎn)擊 F12,選擇開發(fā)人員工具,也可以達(dá)到查看某個(gè)對(duì)象屬性的目的。
在使用 Watij 進(jìn)行編寫自動(dòng)化腳本的時(shí)候,開發(fā)人員需要使用類似于 XPath 這樣的編程語言去查看或者定位要使用的對(duì)象屬性。XPath 是一門在 XML 文檔中查找信息的語言。它用于在 XML 文檔中通過元素和屬性進(jìn)行導(dǎo)航。這樣開發(fā)人員才可以有效地進(jìn)行自動(dòng)化腳本的開發(fā)與應(yīng)用。
Watij 的應(yīng)用實(shí)例
1. 將工程建立完成后,需要新建一個(gè)“Jnit Test Case”(如圖 2 所示),例如輸入“Name”為“TestWatijIBM”(圖 3),點(diǎn)擊“Finish”。就可以建立一個(gè)新的腳本,就可以進(jìn)行編寫程序,進(jìn)行自動(dòng)化測試的工作了。
圖 2. 新建“Junit Test Case”

圖 3. New Junit Test Case 界面

2. 下面我們以“IBM”為關(guān)鍵字進(jìn)行百度搜索的操作做為實(shí)例進(jìn)行介紹。
清單 1. 以“IBM”為關(guān)鍵字進(jìn)行百度搜索
- import static watij.finders.SymbolFactory.name;
- import junit.framework.TestCase;
- import watij.runtime.ie.IE;
- public class TestWatijIBM extends TestCase {
- public void testgooglesearch() throws Exception{
- IE ie = new IE();
- // 打開 IE 瀏覽器
- ie.start();
- // 轉(zhuǎn)到百度主頁
- ie.goTo("www.baidu.com");
- // 在輸入框內(nèi)輸入“IBM”
- ie.textField(name,"wd").set("IBM");
- // 點(diǎn)擊“百度一下”進(jìn)行查找
- ie.button("百度一下").click();
- // 等待 3 秒
- ie.wait(3);
- }
- }
3. 運(yùn)行:輸入以上代碼并保存后,選擇“Run as”->“JUnit Test”,如圖 4 所示。
圖 4. 運(yùn)行代碼

4. 執(zhí)行結(jié)果:如果執(zhí)行過程沒有報(bào)錯(cuò)時(shí),JUnit 執(zhí)行狀態(tài)顯示為綠色(如圖 5 所示),并且能夠打開百度的主搜索界面,對(duì)“IBM”為關(guān)鍵字的網(wǎng)頁進(jìn)行檢索(如圖 6 所示)。
圖 5. 運(yùn)行結(jié)果圖

圖 6. 運(yùn)行 Baidu 界面檢索圖

5. 具體代碼解釋
IE ie = new IE(); IE 對(duì)象實(shí)例化
ie.start(); 啟動(dòng) IE 瀏覽器
ie.goTo("www.ibm.com"); 轉(zhuǎn)到 www.baidu.com 主頁
ie.textField(name,"wd").set("IBM"); 在輸入框中輸入查找內(nèi)容:“IBM”
ie.button("百度一下").click(); 利用 click 函數(shù)點(diǎn)擊“百度一下”這個(gè) Button
此外,Watij 提供了多種常見的 Web 對(duì)象的識(shí)別與操作的支持,例如:窗口的控制(***化及最小化操作),超鏈接的點(diǎn)擊,多選框的選擇,CheckBox 的選中與清除,RadioBox 的選中與清除,下拉框和列表框的選擇,文本框的輸入,圖片及各種表格的插入與刪除,各種按鈕的點(diǎn)擊,F(xiàn)rame 的訪問以及彈出窗口的控制等。
#p#
Watij BeanShell 的介紹
Watij 提供了 BeanShell 的開發(fā)工具,方便了開發(fā)人員編寫腳本進(jìn)行自動(dòng)化的測試或?qū)δ_本進(jìn)行各種調(diào)試的工作。
操作步驟如下所以:
雙擊 launchWatijBeanShell.bat 或用命令行執(zhí)行,進(jìn)入 BeanShell 的操作界面;
圖 7 為用命令行執(zhí)行 launchWatijBeanShell.bat 命令。
圖 8 為 BeanShell 的操作界面,BeanShell 提供的操作界面具有操作方便、簡單等優(yōu)點(diǎn)。
圖 7. 命令行執(zhí)行 launchWatijBeanShell.bat

圖 8. BeanShell 操作界面

在 bsh Workspace 中輸入腳本腳本語言進(jìn)行相關(guān)的測試工作。
圖 9. 利用 BeanShell 執(zhí)行 Baidu 搜索操作

需要說明的是 BeanShell 的是逐步執(zhí)行的,即每一步 bsh 都需要去執(zhí)行,方便開發(fā)人員對(duì)代碼進(jìn)行相關(guān)的 debug 操作,使開發(fā)人員能夠方便地調(diào)試程序。BeanShell 也提供了相應(yīng)的字體設(shè)置功能,開發(fā)人員可以根據(jù)自己的需要進(jìn)行相應(yīng)的字體設(shè)置。
Watij 與 Selenium 的比較
下面本文將介紹 Watij 和 Selenium 的異同。Watij 和 Selenium 都是可用于網(wǎng)頁自動(dòng)化測試的開源工具,兩者都具有各自的特點(diǎn)及優(yōu)勢,它們之間有何異同,到底要如何取舍?首先,Watij 和 Selenium 都是直接在瀏覽器中運(yùn)行腳本,并允許在腳本運(yùn)行時(shí)將瀏覽器最小化,這意味著不需要因?yàn)樽詣?dòng)化測試而占用一臺(tái)機(jī)器的資源。其次,兩者都需要運(yùn)用 XPath 去編寫腳本,所以要求使用者必備 XPath 的基本知識(shí)。但是,它們?cè)诰帉懩_本是有一些地方是有區(qū)別的,下面本文將執(zhí)行相同功能的代碼比較進(jìn)行簡單說明。
清單 2 是用 Watij 執(zhí)行網(wǎng)頁登陸操作的代碼:
清單 2. 執(zhí)行登陸網(wǎng)頁操作的代碼清單
- import junit.framework.TestCase;
- import static watij.finders.SymbolFactory.name;
- import watij.runtime.ie.IE;
- public class TestConcord extends TestCase {
- public void testconcordfunction() throws Exception{
- IE ie = new IE();
- // 打開 IE 瀏覽器
- ie.start();
- // 轉(zhuǎn)到 concord77
- ie.goTo("http://concord77.cn.ibm.com/files/app?lang=en_US#/pinnedfiles");
- // 窗口***化
- ie.maximize();
- // 安全認(rèn)證
- ie.link(name, "overridelink").click();
- // 在輸入框內(nèi)輸入用戶名和密碼
- ie.textField(name,"j_username").set("Abdul_000_006");
- ie.textField(name, "j_password").set("passw0rd");
- // 點(diǎn)擊登陸
- ie.button("登錄").click();
- // 保存結(jié)果圖
- ie.screenCapture(“D:\\Savelogin.png”);
- }
- }
由于本文主要介紹 Watij 的自動(dòng)化測試框架,故不涉及完整的 Selenium 的執(zhí)行代碼。如果用 Selenium 腳本語言編寫上述功能,***的不同在于 Selenium 必須用完整的 XPath 語句輸入才可以編寫執(zhí)行。
例如:
Watij 腳本語言執(zhí)行點(diǎn)擊某個(gè) link: ie.link(name, "overridelink").click();
Selenium 腳本語言執(zhí)行點(diǎn)擊某個(gè) link: Selenium.click("http://a[@name='overridelink']");
相比這下 Watij 的代碼會(huì)顯得更為清晰、靈活,易于理解。
此外相比于 Selenium,Watij 具有更快的執(zhí)行速度。因?yàn)?Watij 是直接調(diào)用 .dll 的文件,不用多加一個(gè)容器去加載,而需要啟動(dòng)一個(gè) jetty 容器。故 Watij 比 Selenium 調(diào)用過程更為直接,所以運(yùn)行速度要超過 Selenium。此外,Selenium 對(duì)彈出窗口、上傳、下載等功能支持的并不好,常常需要借助第三方工具包,如 AutoIt3,Watij 在這方面的處理上要好于 Selenium;另外,Watij 提供了截圖的方法,這是 Selenium 目前所不具備的。但是,Watij 目前只對(duì) IE 瀏覽器有較好的支持,這正是 Selenium 的優(yōu)勢所在,Selenium 可以支持多瀏覽器,如 IE,F(xiàn)irefox, Safari 等等,另外,Selenium 提供了錄制和回放腳本的功能,并可以將錄制好的腳本轉(zhuǎn)換成各種主流編程語言,Watij 則未提供此功能。
所以,當(dāng)測試人員測試的產(chǎn)品是基于 IE 瀏覽器的,Watij 顯然更具優(yōu)勢,但當(dāng)測試人員測試的產(chǎn)品是基于多瀏覽器的,或者需要測試瀏覽器之間的兼容性,顯然 Selenium 會(huì)成為更好的選擇。
Watij 的特點(diǎn)及優(yōu)勢
Watij 提供了一套基于 Watir 的純 Java API 用于 Web 應(yīng)用程序自動(dòng)測試。Watij 通過一個(gè)真實(shí)的瀏覽器來實(shí)現(xiàn)自動(dòng)化測試。
Web 自動(dòng)化測試大致采用兩種方法實(shí)現(xiàn):***種方法是協(xié)議測試,這種方法是建立在 HTTP 協(xié)議上的測試,通過 get 或 post 等方式向服務(wù)器發(fā)送請(qǐng)求,然后對(duì)從服務(wù)器返回的結(jié)果數(shù)據(jù)進(jìn)行解析、驗(yàn)證等操作;第二種方法是基于瀏覽器端的測試,這種測試是通過啟動(dòng)真實(shí)瀏覽器環(huán)境并自動(dòng)執(zhí)行瀏覽器端的相關(guān)操作(如點(diǎn)擊按鈕、文本框的輸入及選擇列表框等 )進(jìn)行測試。Watij 作為 sourceforge 上一個(gè)純 Java API 的 Web 自動(dòng)化測試工具,它以第二種測試方法為原理進(jìn)行工作,它是完全開源免費(fèi)的軟件包,并且在網(wǎng)頁元素定位和跨平臺(tái)部署等方面有著出色的表現(xiàn)。
Watij 自動(dòng)化測試框架還有如下優(yōu)勢:
◆ 它像是模仿真實(shí)的用戶對(duì)網(wǎng)頁進(jìn)行操作的,而且具有較快的運(yùn)行速度。
◆ Watij 對(duì)網(wǎng)頁進(jìn)行操作時(shí)是得到網(wǎng)頁的原始數(shù)據(jù),這樣就可以更為準(zhǔn)確地,客觀地進(jìn)行自動(dòng)化腳本的開發(fā)及驗(yàn)證工作。
◆ Watij 可結(jié)合任何的 Java IDE 進(jìn)行使用,它們的配置過程非常簡單,免去了開發(fā)人員由于配置環(huán)境的問題而浪費(fèi)大量的時(shí)間和精力。
◆ Watij 相比于其他的基于 Web 的自動(dòng)化測試工具有很好的執(zhí)行結(jié)果,提高了開發(fā)人員的工作效率。
◆ Watij 提供了很好的 Debug 工具,為開發(fā)人員進(jìn)行調(diào)試工作提供了方便。
◆ Watij 程序在運(yùn)行時(shí),允許測試人員在該測試機(jī)器上訪問其他網(wǎng)頁或者進(jìn)行其他操作而不會(huì)影響到對(duì)象識(shí)別的結(jié)果。
本文向讀者介紹了 Web 應(yīng)用的自動(dòng)化測試工具 Watij,文章介紹了 Watij 的主要特點(diǎn)和優(yōu)勢,如何安裝配置 Watij 的開發(fā)運(yùn)行環(huán)境,以及通過一個(gè)實(shí)例來重點(diǎn)介紹 Watij 的開發(fā)流程。相信采用 Watij 自動(dòng)化測試工具,會(huì)提高自動(dòng)化測試的效率,可以有效地加速自動(dòng)化測試的程序開發(fā)。
原文:http://www.ibm.com/developerworks/cn/java/j-lo-watij/
【編輯推薦】