胡荊陵,孫 涌,陳建明
(蘇州大學 計算機科學與技術學院,江蘇 蘇州 215006)
?
基于Geb的Web自動化測試的原理與實踐
胡荊陵,孫涌,陳建明
(蘇州大學 計算機科學與技術學院,江蘇 蘇州 215006)
隨著互聯網技術在全球范圍內的迅速發展,各種 Web 應用程序已成為系統軟件開發的主流,對應的自動化測試理論和工具日趨重要。基于開源的自動化測試工具 Geb,介紹了它的大致原理,給出了一個簡單可行的實踐步驟。通過準備測試用例,編輯測試腳本,執行測試腳本的步驟,Geb 可調用各子模塊,根據腳本的要求,模仿真正的人手動操作瀏覽器、并得到測試結果。Geb 可以跨瀏覽器,跨平臺運行,進行本地或遠程的測試,值得在真實開發場景中推廣使用。
自動化測試;測試腳本;Geb
引用格式:胡荊陵,孫涌,陳建明. 基于Geb的Web自動化測試的原理與實踐[J].微型機與應用,2016,35(17):23-25.
隨著我國經濟的飛速發展,軟件行業發展迅速。基于互聯網的 Web 應用程序軟件以易開發、易使用、易擴展和易維護等優點被廣泛使用。而 Web 應用程序的測試往往還是由測試人員手工進行,測試成本高,效率低。并且由于軟件版本的迭代和更新,產生大量回歸測試的工作量。因此對 Web 自動化測試的可行性和效率提出了更高的要求。
本文介紹的 Geb 開源自動化測試框架,對 WebDriver 進行封裝,可以做到跨瀏覽器測試,利于 Web 應用程序在不同瀏覽器品牌和版本下的兼容性測試;使用 Groovy 語言開發測試腳本,使代碼相對精簡,在提高開發效率的同時,Groovy 運行于 Java 虛擬機中,因此也可以輕松地實現跨平臺運行,極大地擴展了 Web 自動化測試的運行環境。
Geb 匯集 WebDriver 的力量、優雅的 jQuery 內容選擇、頁面對象模型的魯棒性和 Groovy 語言的表現力,支持 Spock、JUnit、TestNG 等知名測試框架的集成。Geb 總體框架圖如圖1所示。

圖1 Geb 框架圖
所謂自動化測試,其原理很簡單,就是最大程度地模擬人工對頁面進行的各種點擊和輸入操作。WebDriver 用于調用瀏覽器驅動程序,來模擬用戶的各種輸入和操作,比如:在某個文本框中輸入預設的字符串值,或者是點擊當前頁面上的某個指定的按鈕,是 Web 自動化測試的主要實現方式和核心模塊[1];jQuery選擇器的作用是根據CSS的ID標識符定位 Web 頁面上的唯一 HTML 標簽元素,或根據 CSS class 樣式來定位 Web 頁面上的一個或多個 HTML 標簽元素,提供了開發者最熟悉的獲取頁面 HTML 標簽的方式[2];頁面對象模型的作用是將 jQuery 選擇器獲得的各種 HTML 標簽元素映射抽象為 Geb 能理解的各種對象,為面向對象編碼方式奠定基礎,并為后面的一系列抽象做支撐,最大程度地降低測試腳本的冗余度;測試庫的作用是提供對 Spock、JUnit、TestNG 等知名測試框架的集成支持,測試者可以根據使用習慣,選擇熟悉的測試方法;Groovy 腳本的作用是根據測試用例編寫所有的測試腳本,因此占據工作量的主要部分。
為說明問題,需要有一個被測試的對象,也就是前面提到的Web應用程序。由于只是對 Geb 做一個初步了解,無需太復雜的場景,本文以一個簡單實體類的新增、查詢、更新和刪除 Web 應用為例,來檢驗 Geb 自動化測試的效果。
2.1數據庫設計
準備一個班級實體類,數據表設計如表1所示。

表1 班級表
2.2實現功能
在這個Web 應用程序中,已提供以下功能:查看班級列表、新增班級、刪除班級、查看班級信息。這些功能都是后面需要進行測試的。
具體實現過程和細節已省略,實現后通過瀏覽器打開并訪問即可。需要補充的是,由于 Geb 封裝的 WebDriver 使用 FireFox、Chrome 瀏覽器,實踐時請留意安裝。圖2給出了做好的班級列表頁面。

圖2 班級列表頁面
在準備了 Web 應用程序后,接著就需要準備測試用例和測試腳本。
3.1測試用例
測試用例通常與功能用例成正比關系,本文準備以下5個測試用例,詳見表2。
3.2編輯腳本
測試人員需要根據已制定的測試用例,編寫測試腳本,再由程序自動化測試。由于篇幅有限,本文僅提供其中一個測試用例對應的腳本,代碼如下所示。

表2 測試用例表
class Sit01ClassListToAdd extends GebReportingSpec{
def "測試用例01-班級列表到新增班級"() {
given: "班級列表頁面"
to ClassListPage
when: "點擊新增按鈕"
classAddBtn.click()
then: "新增班級頁面"
at ClassAddPage
}
}
測試腳本是使用 Groovy 語言編寫的,再結合Spock測試庫的使用。其具有以下特點:Groovy 是面向對象編程語言,相對 Java 代碼更加精簡,更加靈活。在同樣熟悉的情況下,使用 Groovy 可以顯著提高編碼效率;Spock 是行為驅動開發的典型代表,得益于敏捷開發提供的新理念,代碼風格屬于自然語言,可讀性極強,可以簡化設計人員與測試人員之間的交流成本[3]。
筆者已將全部的測試用例示例代碼上傳至因特網,讀者如有興趣了解更多,可以通過網絡下載和查看,地址是:http://pan.baidu.com/s/1slKMe9v,期間如遇任何疑問,也可以再做進一步交流。
在執行之前,確保Web 應用程序已啟動,并可通過瀏覽器訪問相應的頁面。
本文使用的 PC 配置如下:操作系統 Windows 7,處理器 i3 4170 3.7 GHz,內存4 GB DDR3 1 600 MHz,硬盤160 GB,主板P8B75。這個配置是非常普通的,大多數軟件公司都可以輕松采購和配置,也就是說大范圍推廣 Web 自動化測試的硬件成本不高。
測試方式采用的是黑盒測試,分別進行3次手動測試和3次自動測試,對比結果如表3所示。

表3 測試結果對比表
可看到,自動測試可以縮短約 50% 的測試時間,并且無需人為干預。這一特性對于 Web 應用程序的回歸測試的貢獻尤其重要,測試腳本可以一次開發多次運行。
Geb 為 Web 應用程序的自動化測試提供了一種切實可行的方案,實踐結果表明,可以極大節約測試成本。也可用于 Web 應用程序的通用自動化處理,有著非常廣闊的應用場景。
目前,Geb版本為0.13.1,還在不斷發展中,期待后續版本發布后,能為各方面帶來提升。
[1] CHANDRAPRABHA C, KUMAR A, SSXENA S. Data driven testing framework using selenium WebDriver [J]. International Journal of Computer Applications, 2015, 118(18):18-23.
[2] 王晶, 溫向彬. 利用jQuery操作HTML元素 [J]. 農業網絡信息, 2008(4):98-99.
[3] SOEKEN M, WILLE R, DRECHSLER R. Assisted behavior driven development using natural language processing[C]. International Conference on Objects, Models, Components, Patterns. Springer-Verlag, 2012:269-287.
Principle and practice of Web automated testing based on Geb
Hu Jingling, Sun Yong, Chen Jianming
(School of Computer Science &Technology, Soochow University, Suzhou 215006, China)
With the rapid development of Internet technology in the global scale, all kinds of Web applications has become the mainstream of software development, the corresponding theories and tools of automated testing have become increasingly important. Geb is an open source browser automation tool. This paper introduces the general principle of Geb, and givs a simple and feasible practical steps. By preparing the test cases, programing the test script, executing the scripts, Geb can directly call its sub-module. According to the requirement of the testing specification, imitation of human manual operation, and the test results are obtained. Geb is a cross-browser, cross-platform automation tool which supports also local and remote mode, is worth used widely in the real development scenarios.
automated testing; test script; Geb
TP31
ADOI: 10.19358/j.issn.1674- 7720.2016.17.007
2016-05-14)
胡荊陵(1981-),男,碩士研究生,主要研究方向:軟件工程、人工智能。
孫涌(1958-),男,博士,副教授,研究生導師,主要研究方向:科學計算可視化、智能信息、軟件工程。
陳建明(1960-),男,碩士,副教授,主要研究方向:軟件工程、智能信息處理、嵌入式系統的開發與應用。