樊付星,黃大慶,周 未
(1.南京航空航天大學(xué) 電子信息工程學(xué)院,江蘇 南京 210016;2.南京航空航天大學(xué) 無(wú)人機(jī)研究院,江蘇 南京 210016;3.南京軍代局駐南京大橋機(jī)器廠軍事代表室 江蘇 南京 211101)
為了提高測(cè)試效率,越來(lái)越多的測(cè)試工作引入了自動(dòng)化測(cè)試的思想和方法。尤其隨著Web應(yīng)用的越來(lái)越復(fù)雜,對(duì)Web應(yīng)用的測(cè)試也提出了更高的要求,也對(duì)測(cè)試帶來(lái)了諸多問(wèn)題如測(cè)試中重復(fù)的和非智力性的工作量越來(lái)越大。實(shí)踐證明,軟件自動(dòng)化測(cè)試技術(shù)提高了軟件測(cè)試的速度和效率,節(jié)省了軟件測(cè)試成本,縮短了產(chǎn)品發(fā)布周期。同時(shí),自動(dòng)化測(cè)試技術(shù)也完成了許多手工測(cè)試無(wú)法實(shí)現(xiàn)的工作。所以,采用自動(dòng)化測(cè)試方法和相應(yīng)的測(cè)試框架成為了軟件開發(fā)組織測(cè)試工作的重要支撐手段。但是自動(dòng)化測(cè)試如果沒有經(jīng)過(guò)良好的設(shè)計(jì),不但耗資大,而且還需要大量的維護(hù)工作。而設(shè)計(jì)良好的自動(dòng)化測(cè)試框架不但維護(hù)成本低,且效率較高。因此,對(duì)Web自動(dòng)化測(cè)試框架的研究具有重要意義[1]。
自動(dòng)化測(cè)試框架就是一個(gè)由假設(shè)、概念以及為自動(dòng)化測(cè)試提供支持的實(shí)踐的集合[2]。文中描述了5種基本的自動(dòng)化測(cè)試框架:模塊化測(cè)試腳本框架,測(cè)試庫(kù)構(gòu)架框架,關(guān)鍵字驅(qū)動(dòng)測(cè)試框架,數(shù)據(jù)驅(qū)動(dòng)測(cè)試框架,混合自動(dòng)化測(cè)試框架。現(xiàn)有的框架大多是在具體工具的基礎(chǔ)上而建立起來(lái)的,如QTP、WinRunner等,ACRAT框架沒有使用現(xiàn)成的測(cè)試工具,這也就避免了使用工具的不足。
自動(dòng)化測(cè)試具有以下優(yōu)點(diǎn):1)令軟件新版本進(jìn)行回歸測(cè)試的開銷最小。2)可以在更短的時(shí)間內(nèi)完成更多的測(cè)試。3)可以完成一些手工測(cè)試不能或難以完成的測(cè)試。4)測(cè)試具有一致性和可重復(fù)性。5)更好地利用資源。6)測(cè)試的復(fù)用性高。7)可以更快地將軟件推向市場(chǎng)。
自動(dòng)化測(cè)試并不是萬(wàn)能的,自動(dòng)化測(cè)試所完成的功能也有一定的局限性,主要表現(xiàn)在以下幾個(gè)方面:1)某些情況下不宜使用自動(dòng)化測(cè)試。2)自動(dòng)化測(cè)試對(duì)測(cè)試質(zhì)量的依賴性極大。3)自動(dòng)化測(cè)試工具本身并不具有靈活性。4)自動(dòng)化測(cè)試不能提高有效性。5)自動(dòng)化測(cè)試比手工測(cè)試發(fā)現(xiàn)的缺陷更少。6)自動(dòng)化測(cè)試可能會(huì)制約軟件開發(fā)。
通過(guò)以上分析可看出自動(dòng)化測(cè)試并不能完全取代手工測(cè)試。認(rèn)識(shí)到軟件自動(dòng)化測(cè)試的這些局限性有助于我們更加合理的對(duì)軟件測(cè)試進(jìn)行自動(dòng)化,通過(guò)自動(dòng)化測(cè)試與手工測(cè)試的完美結(jié)合,充分發(fā)揮各自優(yōu)勢(shì),以達(dá)到更好的測(cè)試效果。
以下論述5種基本的自動(dòng)化測(cè)試框架[3-5],這些框架是了解自動(dòng)測(cè)試框架以及根據(jù)自己的需要和經(jīng)驗(yàn)來(lái)設(shè)計(jì)自己的自動(dòng)測(cè)試框架的基礎(chǔ)。
測(cè)試腳本模塊化框架是通過(guò)創(chuàng)建小的獨(dú)立的腳本來(lái)代表被測(cè)試應(yīng)用程序的模塊和函數(shù),然后用一種分層的方式將這些小腳本組成更大的測(cè)試,從而實(shí)現(xiàn)一個(gè)特定的測(cè)試用例。
為了提高自動(dòng)化測(cè)試套件的可維護(hù)性,測(cè)試腳本模塊化框架應(yīng)用了抽象和封裝的原則。它采用了一個(gè)很著名的編程策略,就是在一個(gè)部件前面構(gòu)建一個(gè)抽象層以掩藏應(yīng)用程序其它的部件。它把應(yīng)用程序從部件的修改中隔離出來(lái),并規(guī)定了在應(yīng)用程序設(shè)計(jì)中的模塊性。這種測(cè)試框架在以后所提到的各種框架中是最容易精通和掌握的。
測(cè)試庫(kù)構(gòu)架框架和測(cè)試腳本模塊化框架非常相似,有著同樣的優(yōu)勢(shì)。但是它把被測(cè)應(yīng)用程序分成過(guò)程和函數(shù),而不是腳本。這種框架要求創(chuàng)建庫(kù)文件來(lái)代表被測(cè)應(yīng)用程序模塊、零件或函數(shù),然后這些庫(kù)文件被測(cè)試用例腳本直接調(diào)用。
將數(shù)據(jù)驅(qū)動(dòng)腳本技術(shù)運(yùn)用到自動(dòng)化測(cè)試框架中就形成了數(shù)據(jù)驅(qū)動(dòng)測(cè)試框架。這種框架從某個(gè)數(shù)據(jù)文件(例如ODBC源文件、Excel文件、.CSV文件、ADO對(duì)象文件等)中讀取輸入、輸出的測(cè)試數(shù)據(jù),然后通過(guò)變量傳入事先錄制好的或手工編寫的測(cè)試腳本中。其中,這些變量被用作傳遞(輸入/輸出)用來(lái)驗(yàn)證應(yīng)用程序的測(cè)試數(shù)據(jù)。在這個(gè)過(guò)程當(dāng)中,數(shù)據(jù)文件的讀取、測(cè)試狀態(tài)和所有測(cè)試信息都被編寫進(jìn)測(cè)試腳本里;測(cè)試數(shù)據(jù)只包含在數(shù)據(jù)文件中,而不是腳本里,測(cè)試腳本只是一個(gè)“驅(qū)動(dòng)”,或者說(shuō)是一個(gè)傳送數(shù)據(jù)的機(jī)制。
數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試?yán)孟嗤臏y(cè)試過(guò)程測(cè)試不同的輸入、輸出組合。它將測(cè)試輸入和預(yù)期輸出組織為表,表中的一行對(duì)應(yīng)一個(gè)測(cè)試。然后創(chuàng)建一個(gè)從表中逐行讀入的自動(dòng)化測(cè)試過(guò)程,執(zhí)行每個(gè)輸入步驟,并檢驗(yàn)預(yù)期結(jié)果。當(dāng)把數(shù)據(jù)驅(qū)動(dòng)測(cè)試過(guò)程放在一起后,就可以反復(fù)使用該過(guò)程來(lái)執(zhí)行新測(cè)試。這種手段對(duì)于有很多不同數(shù)據(jù)選項(xiàng)的應(yīng)用來(lái)說(shuō)最有效。
到目前為止,比較理想的自動(dòng)化測(cè)試框架是“關(guān)鍵字”驅(qū)動(dòng)的自動(dòng)化測(cè)試框架,有時(shí)候也稱為表驅(qū)動(dòng)自動(dòng)化測(cè)試框架,它是對(duì)數(shù)據(jù)驅(qū)動(dòng)自動(dòng)化測(cè)試的有效改進(jìn)和補(bǔ)充。這個(gè)框架需要開發(fā)數(shù)據(jù)表和關(guān)鍵字。這些數(shù)據(jù)表和關(guān)鍵字獨(dú)立于執(zhí)行它們的測(cè)試自動(dòng)化工具,并可以用來(lái)“驅(qū)動(dòng)”待測(cè)應(yīng)用程序和數(shù)據(jù)的測(cè)試腳本代碼,使自動(dòng)化測(cè)試框架獨(dú)立于應(yīng)用程序。關(guān)鍵字驅(qū)動(dòng)測(cè)試看上去與手工測(cè)試用例很類似。在一個(gè)關(guān)鍵字驅(qū)動(dòng)測(cè)試中,把待測(cè)應(yīng)用程序的功能和每個(gè)測(cè)試用例的執(zhí)行步驟一起寫到一個(gè)表中。
最普遍的執(zhí)行框架是上面介紹的所有技術(shù)的一個(gè)結(jié)合,取其長(zhǎng)處,彌補(bǔ)其不足。這個(gè)混合測(cè)試框架是由大部分框架隨著時(shí)間并經(jīng)過(guò)若干項(xiàng)目演化而來(lái)的。
ACRAT框架式基于數(shù)據(jù)驅(qū)動(dòng)測(cè)試方法學(xué)[6-7]的一種測(cè)試框架,可以實(shí)現(xiàn)腳本的重復(fù)使用,明顯降低測(cè)試腳本的規(guī)模。數(shù)據(jù)驅(qū)動(dòng)模型如圖1所示。
圖1 數(shù)據(jù)驅(qū)動(dòng)模型Fig.1 Data-driven module
測(cè)試框架應(yīng)具備如下特點(diǎn):測(cè)試流程總體控制,測(cè)試數(shù)據(jù)驅(qū)動(dòng),測(cè)試框架獨(dú)立性,測(cè)試模塊的原子性以及測(cè)試模塊的可擴(kuò)展性。
框架應(yīng)滿足的策略有:1)框架與應(yīng)用程序相互獨(dú)立;2)框架必須容易進(jìn)行維護(hù)和擴(kuò)展;3)框架所包含的測(cè)試策略和設(shè)計(jì)必須與框架無(wú)關(guān);4)框架所包含的測(cè)試策略和設(shè)計(jì)方法必須易于測(cè)試人員使用;5)框架擁有自己的測(cè)試庫(kù);6)框架能夠易于進(jìn)行測(cè)試設(shè)計(jì)的重用和管理。
ACRAT由主程序、模塊、測(cè)試函數(shù)庫(kù)、Action文件、Data文件、支持工具和測(cè)試結(jié)果等組成,圖2描述了ACRAT自動(dòng)化測(cè)試框架的結(jié)構(gòu)。
圖2 ACRAT框架的結(jié)構(gòu)Fig.2 Structure of ACRAT framework
3.2.1 主程序
當(dāng)進(jìn)行測(cè)試時(shí),主程序Acrat.pl被調(diào)用執(zhí)行。根據(jù)命令行參數(shù)執(zhí)行不同的命令,首先是將文本文件編寫的testcase編譯(Acrat.pl-buildex=BEP)到 XML文件中,然后讀取 XML文件,根據(jù)XML文件讀取測(cè)試用例環(huán)境及測(cè)試用例狀態(tài),并在每個(gè)testcase執(zhí)行前配置好環(huán)境,同時(shí)觸發(fā)數(shù)據(jù)驅(qū)動(dòng)引擎來(lái)解析測(cè)試用例文件,并根據(jù)解析結(jié)果來(lái)調(diào)用相應(yīng)的功能函數(shù),以及調(diào)用數(shù)據(jù)文件中的數(shù)據(jù)關(guān)鍵字來(lái)執(zhí)行測(cè)試,當(dāng)某個(gè)測(cè)試用例執(zhí)行完后,程序會(huì)刪除該測(cè)試用例的測(cè)試環(huán)境,然后進(jìn)行下一個(gè)測(cè)試用例的測(cè)試。
3.2.2 模塊
ACRAT中的模塊包括專業(yè)模塊、框架以及公共模塊。專業(yè)模塊則包括處理特定的功能或者協(xié)議所需要的支持函數(shù),例如 perl中的各種模塊(Win32::IEAutomation)。這些功能模塊都放在函數(shù)庫(kù)lib中??蚣芎凸材K包含一些框架和公共函數(shù),例如數(shù)據(jù)驅(qū)動(dòng)引擎。ACRAT框架將一些配置信息以全局變量的形式定義在了公共模塊中,這些配置包括文件目錄、數(shù)據(jù)目錄、測(cè)試組合目錄、log目錄以及一些服務(wù)、proxy的配置等。
3.2.3 測(cè)試庫(kù)函數(shù)
測(cè)試庫(kù)函數(shù)就是由測(cè)試人員自己編寫的功能函數(shù),根據(jù)具體的測(cè)試要求,實(shí)現(xiàn)相應(yīng)的功能,供執(zhí)行腳本時(shí)調(diào)用,幫助測(cè)試人員實(shí)現(xiàn)自動(dòng)化,例如,打開IE,瀏覽網(wǎng)頁(yè),匹配某一個(gè)關(guān)鍵字就可以定義一個(gè)函數(shù)BrowseURL()。
3.2.4 Action文件
Action文件記載了某個(gè)測(cè)試用例所要執(zhí)行的函數(shù)的集合,每一個(gè)測(cè)試目標(biāo)都包括多個(gè)測(cè)試用例,每一個(gè)測(cè)試用例又由一系列的測(cè)試步驟完成,每個(gè)測(cè)試步驟由邏輯關(guān)鍵字代表的低層次腳本,加上數(shù)據(jù)關(guān)鍵字代表的測(cè)試數(shù)據(jù)組合而成。如圖3所示,此即為Action文件中的一個(gè)測(cè)試用例。
圖3 Action文件Fig.3 Action file
3.2.5 Data文件
Data文件中保存了所有要用到的測(cè)試數(shù)據(jù),測(cè)試數(shù)據(jù)是特定測(cè)試產(chǎn)品和測(cè)試組合的測(cè)試數(shù)據(jù),例如輸入數(shù)據(jù)及期望的結(jié)果。當(dāng)執(zhí)行某一個(gè)測(cè)試用例的時(shí)候,主程序會(huì)將這些數(shù)據(jù)以變量的形式傳送給相應(yīng)的函數(shù)。
3.2.6 支持工具
ACRAT框架目前只支持Firefox和IE瀏覽器,通過(guò)MozRepl來(lái)控制Firefox瀏覽器,通過(guò)AutoIt工具對(duì)Windows GUI(圖形用戶界面)中進(jìn)行自動(dòng)化操作。它利用模擬鍵盤按鍵,鼠標(biāo)移動(dòng)和窗口/控件的組合來(lái)實(shí)現(xiàn)自動(dòng)化任務(wù)。該框架可以根據(jù)自己需要,添加相應(yīng)的工具,或者開發(fā)一些工具。
3.2.7 測(cè)試結(jié)果
測(cè)試結(jié)果組件收集測(cè)試結(jié)果信息,包括一個(gè)測(cè)試結(jié)果總結(jié),如測(cè)試執(zhí)行了幾個(gè)測(cè)試用例、執(zhí)行時(shí)間以及成功、失敗的用例數(shù);還包括一個(gè)失敗的測(cè)試用例執(zhí)行的詳細(xì)信息,該測(cè)試用例失敗了,記錄了具體是哪個(gè)函數(shù)失敗了,以便于檢測(cè)。
當(dāng)運(yùn)行主程序Acrat.pl時(shí),開始測(cè)試。主程序是一個(gè)perl腳本程序。它初始化測(cè)試環(huán)境,解析配置文件,啟動(dòng)數(shù)據(jù)驅(qū)動(dòng)引擎,根據(jù)XML文件對(duì)測(cè)試用例的描述,從Action File中獲得測(cè)試用例所要執(zhí)行的測(cè)試步驟,從Data File中獲得數(shù)據(jù)關(guān)鍵字,測(cè)試結(jié)束后獲得測(cè)試結(jié)果。
整個(gè)自動(dòng)化測(cè)試依賴于主程序Acrat.pl,根據(jù)參數(shù),可以有選擇的執(zhí)行單個(gè)測(cè)試用例或者全部測(cè)試用例,例如Acrat.pl-prefix=測(cè)試用例xxx-debug,這就是單獨(dú)執(zhí)行測(cè)試用例xxx。主程序?qū)ε渲眯畔ⅲ瑴y(cè)試用例解析,從Action File中獲取測(cè)試用例所要執(zhí)行的功能函數(shù),然后通過(guò)驅(qū)動(dòng)自動(dòng)測(cè)試腳本調(diào)用功能函數(shù)來(lái)執(zhí)行測(cè)試用例,最終獲得測(cè)試結(jié)果。
文中提出了一種基于Web的自動(dòng)化測(cè)試框架,它是以數(shù)據(jù)驅(qū)動(dòng)方法學(xué)為基礎(chǔ)設(shè)計(jì)出來(lái)的,可以應(yīng)用在不同類型的項(xiàng)目的測(cè)試過(guò)程中,該框架具有獨(dú)立性、腳本共享、可擴(kuò)展性等特點(diǎn),在應(yīng)用時(shí)可以根據(jù)項(xiàng)目自身的特點(diǎn)對(duì)其進(jìn)行擴(kuò)展和改進(jìn)。但還存在不足之處,如何更好地設(shè)計(jì)測(cè)試用例和函數(shù)庫(kù),以避免在一個(gè)用例運(yùn)行失敗導(dǎo)致所有相關(guān)的測(cè)試用例失敗[7]。而且該框架與 STAF(Software Test Automation Framework)結(jié)合使用,可以實(shí)現(xiàn)跨平臺(tái)并行測(cè)試,這些都是以后重點(diǎn)研究的方向。
[1]朱少民.軟件測(cè)試方法和技術(shù)[M].北京:清華大學(xué)出版社,2005.
[2]賴?yán)澹瑒?qiáng).Web應(yīng)用程序的一種功能自動(dòng)化測(cè)試模型與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2006,32(17):42-44.LAI Li-feng,LIU Qiang.A model and implementation of function test automation for web applications[J].Computer Engineering,2006,32(17):42-44.
[3]李曉會(huì).Web系統(tǒng)自動(dòng)化功能測(cè)試框架研究與實(shí)踐[D].北京:北京郵電大學(xué),2011.
[4]曾北溟.自動(dòng)化測(cè)試框架的研究與實(shí)現(xiàn)[D].武漢:武漢大學(xué),2004.
[5]王光源.Web應(yīng)用的自動(dòng)化測(cè)試[D].濟(jì)南:山東大學(xué),2006.
[6]朱菊,王志堅(jiān),楊雪.基于數(shù)據(jù)驅(qū)動(dòng)的軟件自動(dòng)化測(cè)試框架[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(5)68-70.ZHU Ju,WANG Zhi-jian,YANG Xue.A software automation test frameworks based on data-driven automation methodology[J].Computer Technology and Development,2006,16 (5)68-70.
[8]Mike K.Choosing a Test Automation Framework[S].IBM Developer.