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