何瑩,彭達(dá)
(1.中國移動(深圳)有限公司,廣東 深圳 518048;2.珠海金山網(wǎng)絡(luò)游戲科技有限公司,廣東 珠海 519000)
隨著用戶漫游業(yè)務(wù)量的不斷增加,清算中心對處理漫游話單的及時(shí)性、準(zhǔn)確性的要求也日益加強(qiáng)。在此背景下,如何提高測試的效率以保證軟件質(zhì)量,快速響應(yīng)不斷變化的業(yè)務(wù)需求,降低軟件測試腳本的維護(hù)工作量,提高測試用例的復(fù)用率,也就成為了業(yè)內(nèi)關(guān)注的熱點(diǎn)。
通常情況下,具備交互界面的眾多軟件和Web系統(tǒng),一般都可采用自動化測試工具,通過捕捉錄制和回放的方式來實(shí)現(xiàn)功能測試的自動化。漫游清算系統(tǒng)核心功能為后臺程序,不具備交互界面,無法進(jìn)行捕捉錄制,因此其測試過程相對復(fù)雜很多。
同時(shí),幾種漫游清算系統(tǒng)的業(yè)務(wù)處理流程相同,如圖1所示,程序功能類似,測試方法完全一樣。如果能設(shè)計(jì)一種自動化測試框架,將此類程序的測試方法封裝成測試庫中的關(guān)鍵字,就可以大大提升清算中心自動化開發(fā)和維護(hù)的效率。
正是在這種情況下,本文設(shè)計(jì)了基于Robot Frame-work技術(shù)的自動化測試框架DCHAutoTest。該框架將測試流程中的業(yè)務(wù)邏輯同具體的測試數(shù)據(jù)/腳本解耦,提高了腳本的重用性,減少了腳本的維護(hù)量,適應(yīng)了軟件測試發(fā)展的需要。
圖1 漫游清算系統(tǒng)業(yè)務(wù)處理流程示意圖
Robot Framework是一個(gè)通用的關(guān)鍵字驅(qū)動的自動化測試技術(shù),可以通過一種非常簡單的機(jī)制,使用Python或Java實(shí)現(xiàn)一個(gè)測試庫。通過測試庫中實(shí)現(xiàn)的關(guān)鍵字來驅(qū)動被測軟件。測試用例以HTML,純文本或TSV(制表符分隔的一系列值)文件存儲。在測試用例中以表格的形式定義清楚每一步執(zhí)行操作的關(guān)鍵字,然后由腳本讀入表格的每一行,根據(jù)關(guān)鍵字來執(zhí)行對應(yīng)的動作。
Robot Framework靈活且易于擴(kuò)展,除了自帶的標(biāo)準(zhǔn)庫,還有很多外部擴(kuò)展庫可用。如使用Selenium Library中的關(guān)鍵字來實(shí)現(xiàn)對Web的遠(yuǎn)端操作,使用Database Library來查看Web操作對數(shù)據(jù)庫的操作,使用SSH Library啟停服務(wù)器上的程序、查看日志文件等,另外還可以自己開發(fā)實(shí)現(xiàn)特定功能的測試庫。Robot Framework非常適合測試有不同接口的復(fù)雜軟件、用戶接口、命令行、Web服務(wù)、專有的編程接口等。
Robot Framework提供了一個(gè)圖形用戶界面,叫做RIDE。RIDE能夠編輯和管理用例、保存關(guān)鍵字的資源文件、執(zhí)行測試用例、生成測試報(bào)告等。圖2介紹了Robot Framework的結(jié)構(gòu)圖。
目前,Robot Framework測試技術(shù)對Web自動化測試支持得較好,其中Selenium2Library測試庫包含的關(guān)鍵字能基本滿足Web測試要求,在Web系統(tǒng)的自動化測試中應(yīng)用較廣。但該框架對Linux/Unix端的自動化測試支持較弱,且其測試庫內(nèi)基于Linux/Unix的后臺應(yīng)用較少。因此,本文結(jié)合Robot Framework和Python的優(yōu)點(diǎn),開發(fā)出自動化測試框架DCHAutoTest,其主體程序基于Robot Framework測試庫,用Python開發(fā)而成,同時(shí)設(shè)計(jì)了自己的測試用例模版,該系統(tǒng)運(yùn)行在Robot Framework的IDE上。DCHAutoTest自動化測試框架如圖3所示。
DCHAutoTest包括如下主要模塊:測試環(huán)境搭建模塊、測試用例解析模塊、測試數(shù)據(jù)處理模塊、測試執(zhí)行模塊、測試結(jié)果分析模塊、日志獲取與分析模塊。DCHAutoTest可支持多種清算系統(tǒng)的自動化測試,同時(shí)針對各清算系統(tǒng)的差異性,該框架可自己開發(fā)項(xiàng)目級的測試庫,以滿足各系統(tǒng)自動化測試需求。
DCHAutoTest框架的處理流程如圖4所示。
圖3 DCHAutoTest框架圖
圖4 DCHAutoTest處理流程圖
圖5 自動化測試用例模版
DCHAutoTest的處理流程如下所示:
(1)測試準(zhǔn)備:包括測試用例和測試數(shù)據(jù)準(zhǔn)備。測試人員編寫好測試用例(包括環(huán)境配置信息與測試數(shù)據(jù)處理說明),把準(zhǔn)備好的測試用例和測試數(shù)據(jù)存放到指定的目錄。
(2)測試環(huán)境搭建:DCHAutoTest系統(tǒng)根據(jù)環(huán)境配置信息,進(jìn)行環(huán)境搭建,包括環(huán)境變量設(shè)置,清理輸入目錄、輸出目錄和相關(guān)表數(shù)據(jù)等操作。啟動Main.py將根據(jù)項(xiàng)目開始配置,自動進(jìn)行環(huán)境搭建。
(3)測試用例解析:進(jìn)行測試用例信息讀取、解析。
(4)測試數(shù)據(jù)處理:DCHAutoTest系統(tǒng)根據(jù)測試用例中對測試數(shù)據(jù)的要求,進(jìn)行測試數(shù)據(jù)的規(guī)范化處理,包括話單文件上傳、公參信息導(dǎo)入、話單日期修改、數(shù)據(jù)和文件備份等操作。
(5)測試執(zhí)行:測試數(shù)據(jù)處理完成之后,DCHAuto-Test系統(tǒng)模擬測試用例“執(zhí)行步驟”的要求,在待測試系統(tǒng)上進(jìn)行操作。
(6)測試結(jié)果分析:根據(jù)測試用例中設(shè)置的檢查點(diǎn),如“SQL語句”、“日志內(nèi)容”等,對數(shù)據(jù)表、日志文件進(jìn)行分析,判斷該條測試用例是否執(zhí)行通過。如果不通過,則捕獲失敗的原因。
(7)測試結(jié)果記錄:將分析結(jié)果填到測試用例表的“運(yùn)行情況”一欄,如果測試不通過,填寫“失敗原因”分析結(jié)果。
(8)結(jié)束判斷:如果本次執(zhí)行的是最后一條用例,則循環(huán)結(jié)束;否則繼續(xù)步驟(3)~步驟(8)。
(9)日志獲取和分析:DCHAutoTest系統(tǒng)處理的整個(gè)過程中,都會進(jìn)行日志分析,主要功能為日志提取與展示、操作截屏、錯(cuò)誤告警等。
測試流程與業(yè)務(wù)數(shù)據(jù)的分離/解耦,可以降低自動化測試開發(fā)成本,提高腳本的可重用性,降低測試用例的維護(hù)難度。為此,針對漫游清算系統(tǒng)的特點(diǎn),設(shè)計(jì)了適用于DCHAutoTest的自動化測試用例模板。
測試人員可根據(jù)自動化測試用例模版,如圖5所示,編寫測試用例。其內(nèi)容包括測試內(nèi)容、步驟、預(yù)期輸出、初始化環(huán)境、執(zhí)行命令、上傳文件名、上傳目錄等。自動化測試啟動時(shí),程序?qū)y試執(zhí)行結(jié)果自動填寫到測試用例的“運(yùn)行結(jié)果(PASS或FAIL)”欄、“失敗原因”欄。
通過規(guī)范自動化測試用例的填寫要求,不懂腳本開發(fā)的測試人員也可以完成自動化測試用例的編寫和維護(hù),易于向整個(gè)測試團(tuán)隊(duì)推廣使用。
目前,應(yīng)用DCHAutoTest自動化測試系統(tǒng)框架,已實(shí)現(xiàn)了多個(gè)清算系統(tǒng)的自動化測試功能。如某小型清算系統(tǒng)已實(shí)現(xiàn)了307個(gè)自動化案例,該自動化測試系統(tǒng)可在夜間無人值守的情況下,5小時(shí)內(nèi)執(zhí)行完全部用例,并能分析數(shù)據(jù)庫和日志文件結(jié)果,與預(yù)期結(jié)果進(jìn)行比較,將測試結(jié)果填寫到測試用例。相比手動測試而言,大大提高了執(zhí)行效率。
本節(jié)給出在中型漫游清算系統(tǒng)上運(yùn)用DCHAutoTest框架進(jìn)行自動化測試的結(jié)果,選擇手工測試方法作為結(jié)果對比的基準(zhǔn)方法,用以驗(yàn)證本文所設(shè)計(jì)的新框架的有效性。
實(shí)驗(yàn)環(huán)境包括漫游清算系統(tǒng)和DCHAutoTest框架,前者運(yùn)行在Linux主機(jī)上,后者運(yùn)行在Windows2007上,具體配置如表1所示:
表1 范例所對應(yīng)的環(huán)境配置
實(shí)驗(yàn)數(shù)據(jù)集為該清算系統(tǒng)對應(yīng)的全部測試用例,測試用例記錄字段包括用例ID、所屬項(xiàng)目、所屬模塊、用例標(biāo)題、測試步驟和預(yù)期輸出等。在DCHAutoTest系統(tǒng)框架上執(zhí)行測試用例,并分析測試過程中產(chǎn)生的日志,包括RIDE、主機(jī)、數(shù)據(jù)庫和中間件等類型的設(shè)備所產(chǎn)生的操作記錄日志。日志記錄字段包括操作時(shí)間、操作用戶名、客戶端IP、操作內(nèi)容、操作結(jié)果。實(shí)驗(yàn)中,分別設(shè)置在測試用例數(shù)目為100條到1 000條的條件下,所提出模型與基準(zhǔn)模型所需要的執(zhí)行時(shí)長作為實(shí)驗(yàn)結(jié)果性能對比。在實(shí)驗(yàn)結(jié)果展示中,手動測試表示所選擇的基準(zhǔn)模型方法,本文所提出的新模型方法用DCHAutoTest標(biāo)記,測試時(shí)間以小時(shí)為單位進(jìn)行標(biāo)記。
將測試用例數(shù)設(shè)置為100條開始進(jìn)行實(shí)驗(yàn)。在多組實(shí)驗(yàn)中,逐漸增加測試用例數(shù)量,直到測試用例數(shù)為1 000條。設(shè)置測試用例數(shù)增長步長為100條,以此來驗(yàn)證在不同測試用例數(shù)的條件下,這2種方法所用時(shí)長,具體如圖6所示。從圖6所展示的結(jié)果曲線圖可以看出,隨著用例數(shù)的增加,基準(zhǔn)方法所需要的執(zhí)行時(shí)長趨于指數(shù)級增長。用例數(shù)據(jù)量的急劇增長給整個(gè)執(zhí)行時(shí)長帶來顯著影響,具體表現(xiàn)為圖6中較大斜率曲線的變化趨勢;而基于DCHAutoTest的方法的執(zhí)行時(shí)長隨著用例數(shù)據(jù)量的急劇增加,所需的執(zhí)行時(shí)長變化趨于直線且性能穩(wěn)定。
圖6 測試執(zhí)行時(shí)間VS測試用例數(shù)
在不同的測試用例數(shù)量設(shè)置條件下,這2種方法所需要的具體時(shí)長如表2所示。從表2可以看出,基于手動測試方法的執(zhí)行時(shí)長遠(yuǎn)遠(yuǎn)大于基于DCHAutoTest的方法。當(dāng)查詢數(shù)為100條時(shí),測試時(shí)間達(dá)到20小時(shí),而DCHAutoTest方法卻只需要2小時(shí),節(jié)省了90%的時(shí)長;當(dāng)測試用例數(shù)增加至1 000條時(shí),手動測試方法查詢時(shí)間急速增加到240小時(shí),而DCHAutoTest方法只需要17.5小時(shí),節(jié)省了96%的時(shí)長。
表2 測試執(zhí)行時(shí)長(單位:小時(shí))
下面將比較測試數(shù)據(jù)量的增長幅度對執(zhí)行時(shí)長的影響,選擇用例數(shù)分別為100、200、1 000的測試數(shù)據(jù),這2種方法在不同數(shù)據(jù)量增長率情況下,執(zhí)行時(shí)長變化情況如表3所示:
表3 測試數(shù)據(jù)量不同增長率對應(yīng)的執(zhí)行時(shí)長增長率
當(dāng)測試用例數(shù)據(jù)量從100條變化到200條時(shí),這時(shí)數(shù)據(jù)量的增長率為100%,基準(zhǔn)方法與DCHAutoTest方法的執(zhí)行時(shí)長分別增長150%和50%,增長率相差100%;而當(dāng)測試用例數(shù)據(jù)量從100條急劇變化到1 000條時(shí),基準(zhǔn)方法與DCHAutoTest方法所需執(zhí)行時(shí)長分別增長了900%和400%,增長率之差達(dá)到500%。這2種方法的對比結(jié)果說明在數(shù)據(jù)量急劇增長的情況下,基于DCHAutoTest的方法相比基本方法耗時(shí)更短、效率提升幅度更大,同時(shí)也說明基于DCHAutoTest的方法在規(guī)?;到y(tǒng)的測試中優(yōu)勢明顯。
圖7描述了分別在100條和200條測試用例情況下的執(zhí)行時(shí)長。從圖7可以看出,在2種不同測試用例數(shù)的設(shè)置條件下,基于DCHAutoTest的執(zhí)行效率遠(yuǎn)遠(yuǎn)優(yōu)于基準(zhǔn)方法。而測試用例數(shù)從100條到200條的增長過程中,所提出的DCHAutoTest方法執(zhí)行 時(shí)長增加幅度較小,而基于手動測試的方法執(zhí)行時(shí)長增加幅度較快。此結(jié)果說明基于DCHAutoTest的方法在測試用例數(shù)目急劇增長的情況下,執(zhí)行時(shí)長的絕對值和增長幅度相對手動測試而言都不大,其在執(zhí)行性能上表現(xiàn)出更強(qiáng)的穩(wěn)定性。
圖7 2種實(shí)驗(yàn)方法的綜合結(jié)果對比圖
DCHAutoTest框架大大地簡化了測試的流程,節(jié)省了大量的人力和時(shí)間。通過測試用例模版的設(shè)計(jì)與框架相結(jié)合,在漫游清算系統(tǒng)的后臺自動化測試中得到了很好的應(yīng)用。DCHAutoTest通用性強(qiáng)、框架靈活、可擴(kuò)展性強(qiáng),測試對象由清算系統(tǒng)可擴(kuò)展到其他任何系統(tǒng),只要挑選好功能模塊,即可進(jìn)行自動化測試。主框架提供的功能模塊可以自由組合,并且可以根據(jù)需要繼續(xù)完善補(bǔ)充。系統(tǒng)的特定需求可以進(jìn)行額外開發(fā),不影響主框架。
在應(yīng)用過程中,開發(fā)和測試分工明確,使得該框架極易推廣。開發(fā)人員主要負(fù)責(zé)整個(gè)自動化框架的開發(fā)及運(yùn)維,并可根據(jù)測試人員的需求對特定項(xiàng)目做額外開發(fā)。測試人員根據(jù)項(xiàng)目需求選擇可用的功能模塊后填寫自動化用例表,并使用DCHAutoTest進(jìn)行執(zhí)行,遇到技術(shù)性問題可轉(zhuǎn)由開發(fā)部門進(jìn)行解決。
總之,基于Robot Framework技術(shù)的DCHAutoTest框架,提出和實(shí)現(xiàn)了一種針對后臺系統(tǒng)的自動化測試框架,并在漫游清算系統(tǒng)中得到了廣泛應(yīng)用,為后臺系統(tǒng)的自動化測試提供了新思路。
[1] 張克東. 軟件工程與軟件測試自動化教程[M]. 北京: 電子工業(yè)出版社, 2002.
[2] 朱菊,王志堅(jiān),楊雪. 基于數(shù)據(jù)驅(qū)動的軟件自動化測試框架[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2006(5): 68-70.
[3] 馮玉才,唐艷,周淳. 關(guān)鍵字驅(qū)動自動化測試的原理和實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用, 2004(8): 140-142.
[4] 王磊. 關(guān)鍵字驅(qū)動的自動化測試框架設(shè)計(jì)與實(shí)現(xiàn)[J]. 電子測試, 2010(8): 87-93.
[5] 黃僑,葛世倫. 開源Web自動化測試框架的改進(jìn)研究[J].科學(xué)技術(shù)與工程, 2012(15): 3630-3635.
[6] 楊杰榮,李先國. 迭代開發(fā)模式中功能測試自動化的研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2007(20): 4862-4864.
[7] 張磊,王曉軍. 基于STAF框架下的自動化測試[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2010(3): 116-120.
[8] Wesley J Chun. Python核心編程(第二版)[M]. 宋吉廣,譯. 北京: 人民郵電出版社, 2008.
[9] Elfried Dustin. 自動化軟件測試實(shí)施指南[M]. 余昭輝,范春霞,等譯. 北京: 機(jī)械工業(yè)出版社, 2010.