田傲雪
(中國電子科技集團公司第十五研究所 北京市 100083)
隨著軟件工程新觀點的提出,使得軟件測試得到業界的重視,只有測試合格的軟件才能進行實際應用。在這一背景下,為提高軟件測試效率和水平,應當加快實現自動化測試。因此,除了要對測試用例進行自動構建之外,還應設計一款具備自動執行功能的腳本,并將它們全部融入到一個測試平臺當中,實現自動運行與集中管理。
測試用例(Test Case)簡稱TC,是對特定軟件產品進行測試任務的描述,具體包括如下內容:測試目標、環境、腳本以及最終形成的文檔等。TC 的主要目的是將軟件測試行為轉換成便于管理的模式,可以指導測試的實施、規劃測試數據的準備、編寫測試腳本以及評估測試結果的度量基準等。
從本質的角度上講,TC 為文檔,它是執行實體中最小的一部分,通過TC 能夠對軟件程序進行測試,進而確定出程序的某些特性是否正常。在對TC 進行設計時,應當遵循如下基本原則:
1.2.1 正確性原則
向系統當中輸入用戶的實際數據,借此來檢驗系統是否滿足使用要求,TC 中的各個測試點,應當確保能夠覆蓋使用需求的各項功能,且不得存在異常問題。
1.2.2 全面性原則
要對全部的需求功能項進行全面覆蓋,設計出來的TC 除了能夠對測試點進行測試之外,還應充分考慮用戶的使用需要,以及關聯使用情況和非正常操作等[1]。
為簡化設計過程,在總結前人設計經驗的基礎上,提出一種全新的測試概念模型,即數據與腳本相分離,并在該模型上,對自動化的測試框架進行設計。
2.1.1 模型介紹
對于傳統的測試腳本(Testing Script)而言,作為特定測試的指令,數據與執行邏輯為集成式,二者是以捆綁的形式被嵌入到測試系統當中。在實際應用中發現,此類測試腳本存在一定的不足之處,如靈活性差、可維護性不強等。鑒于此,提出一種全新的測試概念模型,該模型由以下三個部分組成:測試驅動器(TD)、測試用例(TC)以及測試計劃(TP)。其中TP 與實際的TS 相對應,TC 與實際的TC 相對應,TP 則與實際的TC 集相對應[2]。本文所提出模型的對應關系如圖1 所示。
從圖1 當中可以清楚的看出,一個TD 能夠被多個TC 復用,一個TC 則能被多個TP 所擁有,一個TP 能包含多個TC。
2.1.2 測試框架
以本文提出的全新測試模型為依托,對相應的框架方案進行設計,該測試框架的總體結構如圖2 所示。

圖1:測試模型的對應關系示意圖

圖2:測試框架的總體結構示意圖
在整個測試框架當中,腳本執行工具是核心部分,是測試流程的控制樞紐。其中的TC 和TP 為含相關確定參數的JSON 文件,其能夠對腳本執行工具進行驅動,從而對具體的測試任務進行執行。在這一過程當中,腳本會按照驅動參數完成加載,并對與之相應的驅動器腳本進行調用,經過測試得到具體結果。當TP 為腳本執行工具所要執行的任務類型時,可以自動生成測試報告,并以通知的方式對測試結果進行發送。
2.1.3 測試流程
依托上文設計的測試框架,并與Web 管理腳本的實際需求進行有機結合,構建測試流程,具體如下:
(1)對項目的實際測試需求進行確定,這是自動化測試流程構建的前提和基礎,當需求確定后,便可對驅動器腳本進行設計開發;
(2)當完成驅動器腳本后,可將腳本數據及驅動參數添加到腳本管理系統當中,在具體添加的過程中,系統會按照輸入的數據及參數,自動生成腳本;
(3)可在系統中對TD 進行選擇,并對驅動參數進行配置,添加TC 數據,在這一過程中,系統會自動生成描述TC 的JSON文件;
(4)以實際的測試類或任務為依據,將多個TC 組織起來,為其配置定時器參數,添加至TP 中,此時系統會自動生成描述TP的JSON 文件;
(5)在腳本管理系統中,可執行TC、TP,并對每日的計劃任務進行構建。計劃執行的過程中,系統會對腳本執行工具進行調用,按照所得的測試結果生成測試報告,如有必要可以通過郵件的形式,對所得的測試結果進行發送。
本文所提出的測試平臺由以下幾個部分組成:測試數據、腳本執行工具以及腳本管理系統。其中測試數據包括TD、TC、TP 和最終得到的測試結果(僅存于數據庫當中);腳本執行工具的主要作用是執行測試任務;腳本管理系統則是在Web 端提供相關的管理功能,系統以Python 庫的方式,對腳本執行工具進行調用,進而對測試任務進行執行,并獲得最終的測試結果[5]。
2.2.1 技術架構
本次設計開發的測試平臺采用的是當前較為流行的B/S 架構體系,瀏覽器端與服務器端的數據通信借助Http 接口來實現。其中服務器端包括以下幾個層次:
(1)控制層。在測試平臺中,控制層主要負責的是后臺接口程序的執行,通過解析瀏覽器端的統一資源定位符(URL),調用業務邏輯處理,并將所得的數據經渲染后返回。
(2)表現層。該層在測試平臺中主要負責的是將處理后的數據,經渲染之后返回給瀏覽器。
(3)邏輯層。該層主要負責業務處理,平臺自動執行腳本時,邏輯層能夠按照實際需要,對腳本執行工具進行調用,并獲得相應的測試結果。同時,該層還能對數據庫進行讀寫操作。
(4)操作層。該層主要負責對測試數據進行讀寫操作,包括兩部分數據,一部分是測試文件,另一部分是常規數據庫。
測試平臺采用分層架構體系,每個層次均有自己的職責,由此使得設計中的程序代碼耦合度大幅度降低。
2.2.2 數據庫
測試平臺的數據源為MySQL,這是一款關系型數據庫管理系統,其突出的特點是數據存取速度快、靈活性高、開放源碼、無需維護、安全可靠等,適合本次開發的系統。該數據庫采用的引擎是InnoDB,這款引擎不僅具有超高的并發處理能力,而且還有較強的數據恢復能力,數據表通過外鍵進行約束,數據的可靠性更高,完整性更好。
本次開發的測試平臺中,TC 與TP 全部都是由腳本執行工具執行驅動器腳本來完成,由此可見,該工具是整個平臺最為重要的組成部分之一,具體包括如下功能:執行TC、TP,根據所得的結果生成報告等。該工具的設計過程如下:
2.3.1 工具安裝
在測試平臺中,該工具能夠被以下兩種方式調用,一種是Python 庫,另一種是終端命令。前者為在程序中對腳本執行工具進行調用,需要Python 庫提供兩個接口,其中一個負責執行PC,另一個負責執行TP,并在請求接口后,返回測試結果對象,在該對象當中封裝了如下信息:用例集、測試所得的結果、生成的報告以及執行日志等等。因測試平臺的開發人員需要在本地環境對腳本執行工具進行調用,所以該工具應當具備終端命令方式執行測試任務的功能,從而給腳本數據的調試與維護提供便利。為簡化工具的安裝過程,可以借助Setuptools 工具,對Python 的源程序進行打包處理,利用同一個數據包在系統中完成版本的切換。
2.3.2 接口設計
在對腳本執行工具的接口進行設計的過程中,可以結合上文中提出的自動化測試方案,接口包括測試工具主程序、TC 對象、TD對象、測試套件對象、加載器、執行器以及測試通知方法等。
測試平臺的腳本管理系統包括以下幾個功能模塊:TD 管理模塊、TC 管理模塊、TP 管理模塊以及面板模塊等。
2.4.1 TD 管理模塊
該模塊具備如下功能:查看、添加、修改以及刪除等,可以功能設計方案為依托,對該模塊的表結構進行設計,據此設計接口。該模塊的控制層方法類為Driver Controller(DC),邏輯層方法類為Driver Service(DS),操作層方法類為Driver Table(DT)。其中DS 通過對DT 進行調用,來完成數據庫的讀寫操作,而Web.Py內置的application 對象能夠對系統的用戶交互進行控制,并在解析管理請求的基礎上,對DS 進行調用,經模板渲染后返回給用戶。
2.4.2 TC 管理模塊
該模塊分為兩個部分,一部分是TC 管理,另一部分是執行結果管理,前者的基本功能包括查看、添加、修改、刪除、即時執行以及停止執行;后者的主要功能為查看測試結果,該結果中包含如下信息:運行狀態、結果概況、時間以及日志等。
2.4.3 TP 管理模塊
該模塊與TC 管理模塊相類似,也是由兩個部分組成,分別為TP 管理和執行結果管理,其中TP 管理比TC 管理多出一個定時執行功能,而執行結果管理主要是以郵件的形式發送通知。
2.4.4 面板模塊
該模塊能夠對整個平臺的狀況進行顯示和管理,具備如下功能:統計、配置以及掃描等。可對測試數據及結果進行統計,由此可以如實反映出測試的覆蓋程度,并且能夠對測試工具進行配置。
在本次設計中,需要實現的內容包括腳本執行工具以及腳本管理系統,具體的實現過程如下:
2.5.1 腳本執行工具的實現
相對配置文件進行初始化,具體包括TD 及報告模板的存放路徑、郵件服務器地址、賬號、密碼等;當初始化完畢后,應對用戶請求進行解析,以此來判斷用戶是執行TC 還是執行TP,按照解析所得的結構,對加載器進行調用,完成測試目標的加載。如果是Python 庫方式的請求,可借助測試工具直接實現,無需進行程序判斷,若是調用接口,則為執行TC;由測試加載器按測試目標對TC進行初始,封裝成套件后返回,再由執行器根據自動化單元測試框架,依據預先設定好的次序,執行TC。在執行一個TD 下的TC 時,先執行固件構建方法,隨后進行遍歷,如果出現異常,那么執行失敗,無異常則執行成功;當TC執行完成后,執行器會自動生成測試結果,經統計后返回,最終生成測試報告,以郵件的形式進行發送。
2.5.2 腳本管理系統的實現
在測試平臺的開發中,腳本管理系統采用的是Web.Py 框架(后臺),而前臺為混合結構。可以在系統的功能模塊中添加TD,先校驗TD 名稱的唯一性,如果存在,那么無法進行添加,若尚未存在,則可進行添加,此時可在TD 路徑下,對腳本文件進行添加,主要包括固件建立/銷毀的腳本文件、主程序測試的腳本文件以及JSON 文件等。當需要對TD 進行刪除時,可直接點擊界面上的刪除按鍵,完成刪除。TC 的實現與TD 基本相同在此不進行累述。
綜上所述,軟件測試是一項較為復雜且系統的工作,為使當前軟件測試工程中存在的問題得到有效解決,自動化測試隨之成為主流發展趨勢。在這一背景下,本文設計開發了一款自動化、通用化的測試平臺,該平臺能夠對測試用例進行自動構建,還能對測試腳本進行自動執行,由此進一步提升了軟件測試效率,一些問題也隨之迎刃而解。在未來一段時期,應當加大相關方面的研究力度,對測試平臺的功能進行逐步完善,從而使其更好地為軟件工程服務。