摘 要: 探討了一種基于數(shù)據(jù)驅動的自動測試框架D-Arch的設計與實現(xiàn)。該系統(tǒng)使用開放源碼的自動測試工具Selenium,具有模塊化、可重用、測試與開發(fā)松耦合,可滿足不同測試需求的特點。
關鍵詞: 自動測試框架;測試工具;模塊化
隨著Internet的飛速發(fā)展,Web應用程序的規(guī)模與復雜性達到了一個前所未有的高度,Web應用的質量也越來越受到人們的重視。但軟件的手動測試非常耗時,勞動強度高,并且很單調(diào),而且還會引入一些人為的錯誤,因此測試自動化勢在必行。通常自動化測試是指在預設條件下,利用測試自動化工具自動運行軟件,通過實際結果與期望結果的比對,達到評估軟件質量的目的。實現(xiàn)測試的自動化不僅能夠大大減輕測試人員的工作量,還能夠減少測試過程中人為出現(xiàn)的錯誤。在實際應用中,自動化測試技術衍生出了若干研究方向,例如:測試框架、測試腳本技術、測試用例自動生成以及自動化安全測試等。由于使用自動化測試工具進行完全測試存在著各種局限性,自動化測試框架應運而生。但是在工作與實踐中,目前尚沒有一種通用的自動測試框架以適應不同的測試需求。為了適應科研與工作的需求,開發(fā)設計了一種通用的基于數(shù)據(jù)驅動的自動測試框架,命名為D-Arch。
框架是整個或部分系統(tǒng)的可重用設計,表現(xiàn)為一組抽象構件及構件實例間交互的方法;另一種定義認為,框架是可被應用開發(fā)者定制的應用骨架。前者是從應用方面而后者是從目的方面給出的定義。從框架的定義可以了解,框架可以是被重用的基礎平臺,也可以類似于組織架構。
所謂自動化測試框架,即是應用于自動化測試所用的框架。按照框架的定義,自動化測試框架要么是提供可重用的基礎自動化測試模塊,如selenium、watir等,它們主要提供最基礎的自動化測試功能,比如打開一個程序,模擬鼠標和鍵盤來點擊或操作被測試對象,最后驗證被測對象的屬性以判斷程序的正確性;要么是可以提供自動化測試執(zhí)行和管理功能的架構模塊,如robot,STAF等,它們本身不提供基礎的自動化測試支持,只是用于組織、管理和執(zhí)行那些獨立的自動化測試用例,測試完成后統(tǒng)計測試結果,通常這類框架一般都會集成一個基礎自動化測試模塊,如robot框架就可以集成selenium框架。
1 自動化測試框架的類型
目前普遍存在的框架有以下幾種:
(1)數(shù)據(jù)驅動框架:當測試對象流程和應用邏輯固定不變時,可以采用數(shù)據(jù)驅動框架。此時,測試使用的輸入數(shù)據(jù)來自外部數(shù)據(jù)源(例如數(shù)據(jù)庫、Excel表、XML、cvs文件等)[1],這些數(shù)據(jù)通過代碼腳本裝載到測試系統(tǒng)中,從而驅動系統(tǒng)運行。最后,測試產(chǎn)生的數(shù)據(jù)也將保存到外部數(shù)據(jù)中,通過輸入輸出數(shù)據(jù)的比對,完成系統(tǒng)的測試。
?。?)關鍵字驅動框架:又叫表驅動,這種框架需要表和關鍵字[2]。表和關鍵字獨立于被測系統(tǒng),被測系統(tǒng)的每個功能和每個測試的具體執(zhí)行步驟被放入表中,利用表中的關鍵字驅動被測系統(tǒng)運行。
?。?)混合型的框架:這種測試框架同時具有數(shù)據(jù)驅動型和關鍵字驅動型框架的優(yōu)點。常常是由單一框架在不斷應用發(fā)展中演化而來的。
2 D-Arch框架
D-Arch是為解決開發(fā)與測試之間緊密耦合問題而產(chǎn)生的測試框架。系統(tǒng)通過建立測試與開發(fā)人員共同定義和遵循的軟件元數(shù)據(jù)的關聯(lián)——元數(shù)據(jù)映射表,在測試與開發(fā)之間建立了松耦合關系。不論是測試人員修改測試腳本或數(shù)據(jù),還是開發(fā)人員修改軟件,只需要更改元數(shù)據(jù)映射表,測試與開發(fā)人員的現(xiàn)有工作不受影響,可以同步進行。這樣,大大減少了編寫和調(diào)試測試腳本的工作量,更好地實現(xiàn)自動化測試。
D-Arch框架初始運行時,從某個數(shù)據(jù)源(例如ODBC數(shù)據(jù)庫、Excel文件、csv文件、XML文件等)讀取輸入測試數(shù)據(jù)。輸入數(shù)據(jù)通過變量傳入事先錄制好的或手工編寫的測試腳本中,經(jīng)過被測系統(tǒng)的運行,得到實際輸出數(shù)據(jù)。然后D-Arch框架通過對實際輸出數(shù)據(jù)與數(shù)據(jù)源中的期望輸出數(shù)據(jù)比對,從而得到最終的測試結果。在這個過程中,數(shù)據(jù)源的存取、測試狀態(tài)和其他測試信息都被編寫到測試腳本中。測試的輸入輸出數(shù)據(jù)只保存在數(shù)據(jù)源中,測試腳本驅動被測系統(tǒng)運行,在需要輸入數(shù)據(jù)時,自動從數(shù)據(jù)源加載輸入數(shù)據(jù)。系統(tǒng)運行結束時,從數(shù)據(jù)源加載期望輸出數(shù)據(jù)與實際輸出數(shù)據(jù)比對。那么,測試腳本不包含任何測試數(shù)據(jù),測試數(shù)據(jù)的更改獨立于測試腳本。測試腳本只是一個“驅動”,或者說是一個傳送數(shù)據(jù)的機制。
D-Arch采用多層結構,主要包含的層次和模塊如圖1所示。
?。?)管理平臺
管理平臺是針對測試活動管理、執(zhí)行和報告的中央控制臺,主要用于與測試人員交互。測試人員利用此平臺輸入測試數(shù)據(jù),控制測試進程,獲取測試結果及報表。管理平臺主要完成以下任務:運行控制的決策系統(tǒng),負責建立并維護運行隊列,控制運行策略;管理平臺負責維護一個測試任務的隊列,利用決策系統(tǒng)控制隊列中每個測試任務的開始執(zhí)行的時間和狀態(tài),根據(jù)一系列標志對其進行控制。
?。?)工具
工具是例如字符串處理、文件處理、數(shù)據(jù)庫訪問、緩沖處理、日志記錄等程序,它們?yōu)镈-Arch框架提供基礎支持。工具包括所有模塊都可能用到的操作方法,其抽象了不同模塊特性,比如操作Excel表的方法、讀寫測試報告、驅動引擎等。
?。?)工作域
工作域是測試系統(tǒng)框架的執(zhí)行端,根據(jù)管理平臺的決策系統(tǒng),來執(zhí)行運行隊列中的測試腳本,其中運行控制的執(zhí)行系統(tǒng)負責分配測試腳本,并按照指定策略啟動腳本等也是工作域的功能。
?。?)數(shù)據(jù)驅動腳本
數(shù)據(jù)驅動腳本就是那些和被測系統(tǒng)相關聯(lián)的腳本,其中記錄了被測系統(tǒng)的運行流程。數(shù)據(jù)驅動腳本一般通過錄制或手工編寫得到,采用自動化工具私有的語言。D-Arch框架運行時,利用數(shù)據(jù)源中的數(shù)據(jù)對其中的變量賦予合適的數(shù)值,作為測試數(shù)據(jù)的輸入。這些變量作為被測系統(tǒng)輸入的媒介,使腳本能通過外部的數(shù)據(jù)來驅動應用程序。
?。?)報表
報表功能的基本要求是通過查詢/統(tǒng)計/分析,提供用戶所需的準確的數(shù)據(jù)。系統(tǒng)引擎本身支持報表功能,所以在報表模塊,只需要定義報表數(shù)據(jù)以及格式,測試完成后,報表將自動生成。
?。?)引擎
D-Arch系統(tǒng)的引擎主要基于開源測試框架TestNG開發(fā)。TestNG是一個設計用來簡化廣泛的測試需求的測試框架,從單元測試(隔離測試一個類)到集成測試(測試由有多個類、多個包甚至多個外部框架組成的整個系統(tǒng),例如運用服務器)。相比較于JUnit,TestNG可以用于集成測試,這個特性是D-Arch選擇TestNG最重要的原因。通過TestNG,D-Arch系統(tǒng)可以非常簡單的實現(xiàn)與Selenium WebDriver、數(shù)據(jù)系統(tǒng)、報表系統(tǒng)的連接。
?。?)Selenium WebDriver
Selenium是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE、Mozilla和Firefox等[3]。D-Arch通過SeleniumWebDriver就可以直接調(diào)用瀏覽器,從而模擬出人工測試的效果。
D-Arch系統(tǒng)采用數(shù)據(jù)驅動模式的優(yōu)點如下:
(1)基于測試與開發(fā)之間的松耦合關系,只要業(yè)務邏輯確定,在應用程序開發(fā)的同時就可以同步創(chuàng)建測試腳本,而且當業(yè)務邏輯變動時,只需要修改業(yè)務功能部分的腳本;
?。?)基于模塊化設計,最大限度地避免了重復的腳本,減少創(chuàng)建或維護腳本的成本;
?。?)測試輸入數(shù)據(jù),實際輸出數(shù)據(jù)和期望的輸出數(shù)據(jù)與腳本分開,存放在另外的數(shù)據(jù)源中,便于測試人員修改和維護;
?。?)由于測試腳本和測試數(shù)據(jù)的分離,便于自動化測試開發(fā)人員創(chuàng)建數(shù)據(jù)驅動的測試腳本,測試員創(chuàng)建測試數(shù)據(jù);
?。?)系統(tǒng)在測試的過程中收集實際輸出數(shù)據(jù),與數(shù)據(jù)源中的期望輸出數(shù)據(jù)比對,并形成各種不同形式的報表,大大減少了手工結果分析的難度和工作量。
參考文獻
[1] 曾北濱.自動化測試框架的研究與實現(xiàn)[D].武漢:武漢大學,2004.
[2] 朱菊,王志堅,楊雪.基于數(shù)據(jù)驅動的軟件自動化測試框架[J].計算機技術與發(fā)展,2006,16(5):68-70.
[3] JAMES M S. System Testing of Desktop and Web Applications Information Systems Education Journal[J]. 2011,9(3):68-82.