田傲雪
(中國電子科技集團(tuán)公司第十五研究所 北京市 100083)
隨著軟件工程新觀點(diǎn)的提出,使得軟件測試得到業(yè)界的重視,只有測試合格的軟件才能進(jìn)行實(shí)際應(yīng)用。在這一背景下,為提高軟件測試效率和水平,應(yīng)當(dāng)加快實(shí)現(xiàn)自動化測試。因此,除了要對測試用例進(jìn)行自動構(gòu)建之外,還應(yīng)設(shè)計(jì)一款具備自動執(zhí)行功能的腳本,并將它們?nèi)咳谌氲揭粋€測試平臺當(dāng)中,實(shí)現(xiàn)自動運(yùn)行與集中管理。
測試用例(Test Case)簡稱TC,是對特定軟件產(chǎn)品進(jìn)行測試任務(wù)的描述,具體包括如下內(nèi)容:測試目標(biāo)、環(huán)境、腳本以及最終形成的文檔等。TC 的主要目的是將軟件測試行為轉(zhuǎn)換成便于管理的模式,可以指導(dǎo)測試的實(shí)施、規(guī)劃測試數(shù)據(jù)的準(zhǔn)備、編寫測試腳本以及評估測試結(jié)果的度量基準(zhǔn)等。
從本質(zhì)的角度上講,TC 為文檔,它是執(zhí)行實(shí)體中最小的一部分,通過TC 能夠?qū)浖绦蜻M(jìn)行測試,進(jìn)而確定出程序的某些特性是否正常。在對TC 進(jìn)行設(shè)計(jì)時,應(yīng)當(dāng)遵循如下基本原則:
1.2.1 正確性原則
向系統(tǒng)當(dāng)中輸入用戶的實(shí)際數(shù)據(jù),借此來檢驗(yàn)系統(tǒng)是否滿足使用要求,TC 中的各個測試點(diǎn),應(yīng)當(dāng)確保能夠覆蓋使用需求的各項(xiàng)功能,且不得存在異常問題。
1.2.2 全面性原則
要對全部的需求功能項(xiàng)進(jìn)行全面覆蓋,設(shè)計(jì)出來的TC 除了能夠?qū)y試點(diǎn)進(jìn)行測試之外,還應(yīng)充分考慮用戶的使用需要,以及關(guān)聯(lián)使用情況和非正常操作等[1]。
為簡化設(shè)計(jì)過程,在總結(jié)前人設(shè)計(jì)經(jīng)驗(yàn)的基礎(chǔ)上,提出一種全新的測試概念模型,即數(shù)據(jù)與腳本相分離,并在該模型上,對自動化的測試框架進(jìn)行設(shè)計(jì)。
2.1.1 模型介紹
對于傳統(tǒng)的測試腳本(Testing Script)而言,作為特定測試的指令,數(shù)據(jù)與執(zhí)行邏輯為集成式,二者是以捆綁的形式被嵌入到測試系統(tǒng)當(dāng)中。在實(shí)際應(yīng)用中發(fā)現(xiàn),此類測試腳本存在一定的不足之處,如靈活性差、可維護(hù)性不強(qiáng)等。鑒于此,提出一種全新的測試概念模型,該模型由以下三個部分組成:測試驅(qū)動器(TD)、測試用例(TC)以及測試計(jì)劃(TP)。其中TP 與實(shí)際的TS 相對應(yīng),TC 與實(shí)際的TC 相對應(yīng),TP 則與實(shí)際的TC 集相對應(yīng)[2]。本文所提出模型的對應(yīng)關(guān)系如圖1 所示。
從圖1 當(dāng)中可以清楚的看出,一個TD 能夠被多個TC 復(fù)用,一個TC 則能被多個TP 所擁有,一個TP 能包含多個TC。
2.1.2 測試框架
以本文提出的全新測試模型為依托,對相應(yīng)的框架方案進(jìn)行設(shè)計(jì),該測試框架的總體結(jié)構(gòu)如圖2 所示。
圖1:測試模型的對應(yīng)關(guān)系示意圖
圖2:測試框架的總體結(jié)構(gòu)示意圖
在整個測試框架當(dāng)中,腳本執(zhí)行工具是核心部分,是測試流程的控制樞紐。其中的TC 和TP 為含相關(guān)確定參數(shù)的JSON 文件,其能夠?qū)δ_本執(zhí)行工具進(jìn)行驅(qū)動,從而對具體的測試任務(wù)進(jìn)行執(zhí)行。在這一過程當(dāng)中,腳本會按照驅(qū)動參數(shù)完成加載,并對與之相應(yīng)的驅(qū)動器腳本進(jìn)行調(diào)用,經(jīng)過測試得到具體結(jié)果。當(dāng)TP 為腳本執(zhí)行工具所要執(zhí)行的任務(wù)類型時,可以自動生成測試報(bào)告,并以通知的方式對測試結(jié)果進(jìn)行發(fā)送。
2.1.3 測試流程
依托上文設(shè)計(jì)的測試框架,并與Web 管理腳本的實(shí)際需求進(jìn)行有機(jī)結(jié)合,構(gòu)建測試流程,具體如下:
(1)對項(xiàng)目的實(shí)際測試需求進(jìn)行確定,這是自動化測試流程構(gòu)建的前提和基礎(chǔ),當(dāng)需求確定后,便可對驅(qū)動器腳本進(jìn)行設(shè)計(jì)開發(fā);
(2)當(dāng)完成驅(qū)動器腳本后,可將腳本數(shù)據(jù)及驅(qū)動參數(shù)添加到腳本管理系統(tǒng)當(dāng)中,在具體添加的過程中,系統(tǒng)會按照輸入的數(shù)據(jù)及參數(shù),自動生成腳本;
(3)可在系統(tǒng)中對TD 進(jìn)行選擇,并對驅(qū)動參數(shù)進(jìn)行配置,添加TC 數(shù)據(jù),在這一過程中,系統(tǒng)會自動生成描述TC 的JSON文件;
(4)以實(shí)際的測試類或任務(wù)為依據(jù),將多個TC 組織起來,為其配置定時器參數(shù),添加至TP 中,此時系統(tǒng)會自動生成描述TP的JSON 文件;
(5)在腳本管理系統(tǒng)中,可執(zhí)行TC、TP,并對每日的計(jì)劃任務(wù)進(jìn)行構(gòu)建。計(jì)劃執(zhí)行的過程中,系統(tǒng)會對腳本執(zhí)行工具進(jìn)行調(diào)用,按照所得的測試結(jié)果生成測試報(bào)告,如有必要可以通過郵件的形式,對所得的測試結(jié)果進(jìn)行發(fā)送。
本文所提出的測試平臺由以下幾個部分組成:測試數(shù)據(jù)、腳本執(zhí)行工具以及腳本管理系統(tǒng)。其中測試數(shù)據(jù)包括TD、TC、TP 和最終得到的測試結(jié)果(僅存于數(shù)據(jù)庫當(dāng)中);腳本執(zhí)行工具的主要作用是執(zhí)行測試任務(wù);腳本管理系統(tǒng)則是在Web 端提供相關(guān)的管理功能,系統(tǒng)以Python 庫的方式,對腳本執(zhí)行工具進(jìn)行調(diào)用,進(jìn)而對測試任務(wù)進(jìn)行執(zhí)行,并獲得最終的測試結(jié)果[5]。
2.2.1 技術(shù)架構(gòu)
本次設(shè)計(jì)開發(fā)的測試平臺采用的是當(dāng)前較為流行的B/S 架構(gòu)體系,瀏覽器端與服務(wù)器端的數(shù)據(jù)通信借助Http 接口來實(shí)現(xiàn)。其中服務(wù)器端包括以下幾個層次:
(1)控制層。在測試平臺中,控制層主要負(fù)責(zé)的是后臺接口程序的執(zhí)行,通過解析瀏覽器端的統(tǒng)一資源定位符(URL),調(diào)用業(yè)務(wù)邏輯處理,并將所得的數(shù)據(jù)經(jīng)渲染后返回。
(2)表現(xiàn)層。該層在測試平臺中主要負(fù)責(zé)的是將處理后的數(shù)據(jù),經(jīng)渲染之后返回給瀏覽器。
(3)邏輯層。該層主要負(fù)責(zé)業(yè)務(wù)處理,平臺自動執(zhí)行腳本時,邏輯層能夠按照實(shí)際需要,對腳本執(zhí)行工具進(jìn)行調(diào)用,并獲得相應(yīng)的測試結(jié)果。同時,該層還能對數(shù)據(jù)庫進(jìn)行讀寫操作。
(4)操作層。該層主要負(fù)責(zé)對測試數(shù)據(jù)進(jìn)行讀寫操作,包括兩部分?jǐn)?shù)據(jù),一部分是測試文件,另一部分是常規(guī)數(shù)據(jù)庫。
測試平臺采用分層架構(gòu)體系,每個層次均有自己的職責(zé),由此使得設(shè)計(jì)中的程序代碼耦合度大幅度降低。
2.2.2 數(shù)據(jù)庫
測試平臺的數(shù)據(jù)源為MySQL,這是一款關(guān)系型數(shù)據(jù)庫管理系統(tǒng),其突出的特點(diǎn)是數(shù)據(jù)存取速度快、靈活性高、開放源碼、無需維護(hù)、安全可靠等,適合本次開發(fā)的系統(tǒng)。該數(shù)據(jù)庫采用的引擎是InnoDB,這款引擎不僅具有超高的并發(fā)處理能力,而且還有較強(qiáng)的數(shù)據(jù)恢復(fù)能力,數(shù)據(jù)表通過外鍵進(jìn)行約束,數(shù)據(jù)的可靠性更高,完整性更好。
本次開發(fā)的測試平臺中,TC 與TP 全部都是由腳本執(zhí)行工具執(zhí)行驅(qū)動器腳本來完成,由此可見,該工具是整個平臺最為重要的組成部分之一,具體包括如下功能:執(zhí)行TC、TP,根據(jù)所得的結(jié)果生成報(bào)告等。該工具的設(shè)計(jì)過程如下:
2.3.1 工具安裝
在測試平臺中,該工具能夠被以下兩種方式調(diào)用,一種是Python 庫,另一種是終端命令。前者為在程序中對腳本執(zhí)行工具進(jìn)行調(diào)用,需要Python 庫提供兩個接口,其中一個負(fù)責(zé)執(zhí)行PC,另一個負(fù)責(zé)執(zhí)行TP,并在請求接口后,返回測試結(jié)果對象,在該對象當(dāng)中封裝了如下信息:用例集、測試所得的結(jié)果、生成的報(bào)告以及執(zhí)行日志等等。因測試平臺的開發(fā)人員需要在本地環(huán)境對腳本執(zhí)行工具進(jìn)行調(diào)用,所以該工具應(yīng)當(dāng)具備終端命令方式執(zhí)行測試任務(wù)的功能,從而給腳本數(shù)據(jù)的調(diào)試與維護(hù)提供便利。為簡化工具的安裝過程,可以借助Setuptools 工具,對Python 的源程序進(jìn)行打包處理,利用同一個數(shù)據(jù)包在系統(tǒng)中完成版本的切換。
2.3.2 接口設(shè)計(jì)
在對腳本執(zhí)行工具的接口進(jìn)行設(shè)計(jì)的過程中,可以結(jié)合上文中提出的自動化測試方案,接口包括測試工具主程序、TC 對象、TD對象、測試套件對象、加載器、執(zhí)行器以及測試通知方法等。
測試平臺的腳本管理系統(tǒng)包括以下幾個功能模塊:TD 管理模塊、TC 管理模塊、TP 管理模塊以及面板模塊等。
2.4.1 TD 管理模塊
該模塊具備如下功能:查看、添加、修改以及刪除等,可以功能設(shè)計(jì)方案為依托,對該模塊的表結(jié)構(gòu)進(jìn)行設(shè)計(jì),據(jù)此設(shè)計(jì)接口。該模塊的控制層方法類為Driver Controller(DC),邏輯層方法類為Driver Service(DS),操作層方法類為Driver Table(DT)。其中DS 通過對DT 進(jìn)行調(diào)用,來完成數(shù)據(jù)庫的讀寫操作,而Web.Py內(nèi)置的application 對象能夠?qū)ο到y(tǒng)的用戶交互進(jìn)行控制,并在解析管理請求的基礎(chǔ)上,對DS 進(jìn)行調(diào)用,經(jīng)模板渲染后返回給用戶。
2.4.2 TC 管理模塊
該模塊分為兩個部分,一部分是TC 管理,另一部分是執(zhí)行結(jié)果管理,前者的基本功能包括查看、添加、修改、刪除、即時執(zhí)行以及停止執(zhí)行;后者的主要功能為查看測試結(jié)果,該結(jié)果中包含如下信息:運(yùn)行狀態(tài)、結(jié)果概況、時間以及日志等。
2.4.3 TP 管理模塊
該模塊與TC 管理模塊相類似,也是由兩個部分組成,分別為TP 管理和執(zhí)行結(jié)果管理,其中TP 管理比TC 管理多出一個定時執(zhí)行功能,而執(zhí)行結(jié)果管理主要是以郵件的形式發(fā)送通知。
2.4.4 面板模塊
該模塊能夠?qū)φ麄€平臺的狀況進(jìn)行顯示和管理,具備如下功能:統(tǒng)計(jì)、配置以及掃描等??蓪y試數(shù)據(jù)及結(jié)果進(jìn)行統(tǒng)計(jì),由此可以如實(shí)反映出測試的覆蓋程度,并且能夠?qū)y試工具進(jìn)行配置。
在本次設(shè)計(jì)中,需要實(shí)現(xiàn)的內(nèi)容包括腳本執(zhí)行工具以及腳本管理系統(tǒng),具體的實(shí)現(xiàn)過程如下:
2.5.1 腳本執(zhí)行工具的實(shí)現(xiàn)
相對配置文件進(jìn)行初始化,具體包括TD 及報(bào)告模板的存放路徑、郵件服務(wù)器地址、賬號、密碼等;當(dāng)初始化完畢后,應(yīng)對用戶請求進(jìn)行解析,以此來判斷用戶是執(zhí)行TC 還是執(zhí)行TP,按照解析所得的結(jié)構(gòu),對加載器進(jìn)行調(diào)用,完成測試目標(biāo)的加載。如果是Python 庫方式的請求,可借助測試工具直接實(shí)現(xiàn),無需進(jìn)行程序判斷,若是調(diào)用接口,則為執(zhí)行TC;由測試加載器按測試目標(biāo)對TC進(jìn)行初始,封裝成套件后返回,再由執(zhí)行器根據(jù)自動化單元測試框架,依據(jù)預(yù)先設(shè)定好的次序,執(zhí)行TC。在執(zhí)行一個TD 下的TC 時,先執(zhí)行固件構(gòu)建方法,隨后進(jìn)行遍歷,如果出現(xiàn)異常,那么執(zhí)行失敗,無異常則執(zhí)行成功;當(dāng)TC執(zhí)行完成后,執(zhí)行器會自動生成測試結(jié)果,經(jīng)統(tǒng)計(jì)后返回,最終生成測試報(bào)告,以郵件的形式進(jìn)行發(fā)送。
2.5.2 腳本管理系統(tǒng)的實(shí)現(xiàn)
在測試平臺的開發(fā)中,腳本管理系統(tǒng)采用的是Web.Py 框架(后臺),而前臺為混合結(jié)構(gòu)??梢栽谙到y(tǒng)的功能模塊中添加TD,先校驗(yàn)TD 名稱的唯一性,如果存在,那么無法進(jìn)行添加,若尚未存在,則可進(jìn)行添加,此時可在TD 路徑下,對腳本文件進(jìn)行添加,主要包括固件建立/銷毀的腳本文件、主程序測試的腳本文件以及JSON 文件等。當(dāng)需要對TD 進(jìn)行刪除時,可直接點(diǎn)擊界面上的刪除按鍵,完成刪除。TC 的實(shí)現(xiàn)與TD 基本相同在此不進(jìn)行累述。
綜上所述,軟件測試是一項(xiàng)較為復(fù)雜且系統(tǒng)的工作,為使當(dāng)前軟件測試工程中存在的問題得到有效解決,自動化測試隨之成為主流發(fā)展趨勢。在這一背景下,本文設(shè)計(jì)開發(fā)了一款自動化、通用化的測試平臺,該平臺能夠?qū)y試用例進(jìn)行自動構(gòu)建,還能對測試腳本進(jìn)行自動執(zhí)行,由此進(jìn)一步提升了軟件測試效率,一些問題也隨之迎刃而解。在未來一段時期,應(yīng)當(dāng)加大相關(guān)方面的研究力度,對測試平臺的功能進(jìn)行逐步完善,從而使其更好地為軟件工程服務(wù)。