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