黃夢薇,黃大慶,周 未
(1.南京航空航天大學 電子信息工程學院,江蘇 南京 210016;2.南京航空航天大學 無人機研究院,江蘇 南京 210016;3.南京軍代局駐南京大橋機器廠軍事代表室 江蘇 南京 211101)
隨著Internet在全球范圍的普及,Web應用系統得到了廣泛的應用。而在Web系統開發和維護階段都將面臨不斷地變更,這些變更可以概括為3個方面:1)新需求的驅動;2)缺陷的修復;3)代碼優化、代碼移植。軟件一旦有變更,測試必須進行驗證。對于每一個變更都將涉及變更點本身實現的正確性驗證,以及是否影響到原有功能的正確使用。回歸測試的主要目的就是保證這兩點能得到充分驗證[1]。由于回歸測試的工作涉及原來已測試通過的用例重復執行,流程固定、測試項目重復率高,所以最適合開展自動化測試工作。
自動化測試的定義就是使用軟件工具來代替手工進行一系列動作,通常是使用腳本或者其他代碼驅動應用程序,這一切可以通過用戶界面(如瀏覽器)完成,也可以通過直接命令(從客戶端發向服務器,以模仿瀏覽器發送的命令)完成[2]。
自動化測試需要有一個良好的框架,即從開發到運行層次清楚,操作方便。比如通過Web方式提交任務、查看結果等,并和測試執行、Bug跟蹤系統集成。自動化測試的框架,可以理解為兩個層次:一個層次只是在腳本開發上,相當于框架的開發平臺,如何靈活的集成相應的測試工具,構造成關鍵字驅動或數據驅動的腳本[3]。另一個層次是在更高層面上管理整個框架,包括測試腳本的管理、測試的執行和測試結果的顯示。
目前可供使用的開源Web驅動程序有很多,代表是Selenium和Watir。表1對Selenium和Watir進行了一番比較,其中主要考察點集中在工具適用范圍、支持語言和安裝條件。
最終,考慮到Selenium的錄制功能局限性和高復雜度,Ruby語言的全功能性及Watir的輕便、易上手等特點,選擇Watir來作為自動化測試框架的驅動程序。
Watir(Web Application Testing in Ruby)是一個使用Ruby實現的開源工具,用于開發基于Web應用的自動化測試程序,并提供了輕量級的自動化測試程序框架和豐富的開發庫。它的工作原理如圖1,是通過DOM (Document Object Model)技術來獲取web頁面的元素。已經有很多大公司例如Facebook、HP、Yahoo等都在使用Watir進行 web應用測試,主要是應用在功能測試和回歸測試中。

表1 Selenium和Watir的比較Tab.1 Comparison between selenium and watir

圖1 Watir工作原理Fig.1 Working principal of watir
Watir的主要特性以及使用Watir開發自動化程序的優勢如下:
1)Watir可以工作在任何包含C編譯器的操作系統上,它能像人工操作一樣驅動瀏覽器,包括鏈接點擊、填寫文本和按鍵操作等等,并且核對操作的正確性。
2)Watir 提 供 了 多 種 獲 取 頁 面 元 素 (button、checkbox、selectlist、link、image 等)的方法,可以測試各種 web 程序,如ASP.NET,JSP,PHP,Rails等。
3)Watir基于 Ruby語言,Ruby語言是一種面向對象的腳本語言,Ruby程序解釋執行不用編譯。
4)Watir程序可以通過Ruby提供的交互命令工具IRB(Interactive Ruby Shell)或者Eclipse來進行調試,方便調試人員快速定位程序的錯誤。
5)Ruby提供了Test::Unit單元測試框架,可以通過assert語句來判斷結果的正確性。
6)Watir在驅動瀏覽器運行的時候,可以同時進行其他的操作甚至是運行多個Ruby的腳本,它們之間互不影響。
下面介紹自行設計的針對WEB系統自動化回歸測試的框架。
首先介紹目前常用的幾種腳本:
1)線性腳本:錄制手工執行的測試用例得到的腳本,這種腳本包括所有的擊鍵、移動和輸入數據等,所有錄制的測試用例都可以得到完整的回放。
2)結構化腳本:具有各種邏輯結構,包括選擇性結構、分支結構、循環迭代結構、而且具有函數調用功能。
3)共享腳本:是指某個腳本可以被多個測試用例使用。
4)數據驅動腳本:將測試輸入存儲在獨立的(數據)文件或數據庫中,而不是存儲在腳本中,使腳本的指令和數據分離。
5)關鍵字驅動腳本:數據驅動腳本的邏輯擴張,在數據和指令之間再增加一層關鍵字,用關鍵字來描述軟件業務邏輯中的最小單元,業務邏輯的變化不會影響其腳本的底層。
表2顯示了各種腳本的測試帶來的成本和效益比較[3]。

表2 各腳本測試成本和收益比較Tab.2 Comparison among different test scripts in cost and profit
通過上述比較,可以看到數據驅動腳本和關鍵字驅動腳本效率最高,研究后WATF中的測試腳本采用關鍵字驅動腳本模式。
WATF采用關鍵字驅動機制,采用Excel格式存儲,測試用例的關鍵字劃分如圖2所示。

圖2 測試用例關鍵字劃分Fig.2 Keyword division in test cases
關鍵字說明如下:
1)ID:作為測試用例的編號,可以定位測試過程中出錯的位置;
2)Action:具體操作,包括 click、select、type、set和 goto;
3)Object:操作對象,即 Html頁面中的元素,Watir的 API可以識別的控件對象包括按鈕(button)、單選框(radio)、復選框 (checkbox)、 文 本 框 (textfield)、 下 拉 框 (selectlist)、 標 簽(label)、鏈接(link)、圖片(image);
4)Prop name:對象的標識屬性,由于頁面中的控件對象不是唯一的,所以需要通過控件的id、name等屬性來找到實際操作的對象;
5)Prop Value:對象標識屬性的值;
6)Parameter:傳入參數,鍵盤或者鼠標的操作會輸入具體的值到文本框中,這作為傳入的參數;
7)Expected value:期望值,測試框架的目的就是為了找出系統的Bug,那么需要將期望值與實際的輸出值進行對比,從而判斷這條case運行正確與否。
這樣,測試用例被清晰的表達成了對象、行為和數據,實現對象和數據的分離。之后通過程序的解析處理,獲取用例中的關鍵字,從而生成測試腳本。
WATF主要由測試用例庫、測試腳本生成模塊、測試控制模塊和測試報告生成模塊和缺陷控制模塊組成,其整體架構如圖3所示。

圖3 WATF基本架構Fig.3 Basic structure of WATF
1)測試用例庫:根據回歸測試的特點,每次進行測試修改的只是部分功能。那么對每個待測系統的用例分別進行管理,每次進行回歸測試只需修改少量的測試用例,提高了測試用例的復用率,使得腳本的維護和更新更加簡單。
2)測試腳本生成模塊:測試啟動時,由程序加載并解析測試用例文件,根據已有的測試用例,解析后獲取相應關鍵字,生成Watir能識別的測試腳本,從而動態生成測試流程,驅動測試自動執行,這樣即實現了測試執行與測試邏輯的分離。
3)測試控制模塊:此模塊是整個框架的核心,主要功能是加載初始配置文件及測試腳本來驅動Web界面元素,模擬人工操作。初始配置文件包括測試環境、測試日志存放路徑等信息。
4)測試報告生成模塊:將測試腳本中傳入的預期執行結果同測試過程中實際執行結果對比,判斷測試是否通過,測試結果用PASS、FAIL和EXCEPTION分別表示運行正常、失敗和測試過程中異常導致測試中止。測試運行結束后,根據定義好的測試報告模板,將測試結果輸出到EXCEL文件中。測試人員可以通過查看測試報告和日志文件對運行失敗的測試用例進行分析。
5)缺陷報告庫:用來統一管理測試的缺陷,便于測試人員查看。
為了分析采用自動化測試框架測試和全手工測試作業的效率,將WATF應用于某軟件公司開發部,主要對于開發部內幾款的Web應用產品進行回歸測試。在相同的測試環境中對同一個功能模塊分別進行自動化測試和手工測試,經過測試環境準備,測試用例編寫,及測試的執行后,發現WATF給回歸測試帶來的效率提高是顯著的,RT測試效率平均提高75%。同時,由于測試用例庫的引入,在后期的開發過程中,可以重復利用大部分的測試用例,這樣可以得到數倍于前期回歸測試的效率提高。
文中通過對現有測試工具和測試腳本技術的對比研究,選擇開源框架Watir作為驅動程序,設計了基于關鍵字驅動的自動化回歸測試框架WATF。WATF中對于自動化測試過程中的測試用例生成、腳本生成、測試執行和測試結果管理都有相應的規范和模塊,測試人員易于根據模塊來理解測試框架,進而將WATF應用到實際測試作業中。相對于傳統的全手工測試,利用WATF進行回歸測試提高了75%的測試效率。將WATF應用于企業的回歸測試,對于這類大量的重復測試工作具有很高的實用性,并帶來可觀的經濟效益。
[1]肖利瓊.軟測之魂:核心測試設計精解[M].北京:電子工業出版社,2011.
[2]Ash,L.Web測試指南[M].北京:機械工業出版社,2004.
[3]朱少民.全程軟件測試[M].北京:電子工業出版社,2007.
[4]Gogna N.Comparative study of browser based open source testing tools watir and wet[J].International Journal on Computer Science and Engineering,2011.
[5]賈麗,許靜,金鑫,等.Web系統測試用例自動執行系統[J].計算機工程與應用,2009,45(4):82-85.
JIA Li,XU Jing,JIN Xin,et al.Test case auto-execution system for Web application[J].Computer Engineering and Applications,2009,45(4):82-85.
[6]接卉,蘭雨晴,駱沛.一種關鍵字驅動的自動化測試框架[J].計算機應用研究,2009,26(3):927-929.
JIE Hui,LAN Yu-qing,LUO Pei.Keyword driven automated testing framework[J].Application Research of Computers,2009,26(3):927-929.
[7]楊杰榮,李先國.迭代開發模式中功能測試自動化的研究與實現[J].計算機工程與設計,2007,28(20):4862-4864.
YANG Jie-rong,LI Xian-guo.Research and implementation of automated function test in iterative development model[J].Computer Engineering and Design,2007,28(20):4862-4864.
[8]黃僑,葛世倫.開源Web自動化測試框架的改進研究[J].科學技術與工程,2012,12(15):3630-3635.
HUANG Qiao,GE Shi-lun.Research of improvement for open source web automatic testing framework[J].Science Technology and Engineering,2012,12(15):3630-3635.
[9]王晴.Web自動化測試研究與Watir框架開發 [D].武漢:武漢理工大學,2011.