朱煥亮ZHU Huan-liang(中航工業(yè)信息技術中心 金航數碼科技有限責任公司,北京 100028)
基于自動化測試框架的用例研究與實現(xiàn)
朱煥亮
ZHU Huan-liang
(中航工業(yè)信息技術中心 金航數碼科技有限責任公司,北京 100028)
針對軟件自動化測試框架開發(fā)自動化測試用例效率不高的現(xiàn)狀,分析問題產生原因,提出通過設計自動生成工具來改善測試用例的開發(fā)方式,并給出提高自動化測試用例開發(fā)效率的具體實現(xiàn)。
自動化測試框架;測試用例自動生成
隨著軟件系統(tǒng)的日趨復雜以及回歸測試等重復性測試在整個軟件生命周期中所占的重要地位,我們必須使用自動化測試技術來提高我們的測試效率。自動化測試技術能幫助軟件開發(fā)人員和測試人員在更短時間內開發(fā)出更高質量的產品,通過代替頻繁重復的手工測試從而節(jié)省了大量的時間和開支。但是利用捕捉/回放測試工具本身無法提供高效的測試。捕捉產生的腳本對于應用的變化過于敏感,以至于測試人員要不停地修改測試腳本。這樣的測試腳本不是我們想要的。我們需要的是一個易于維護的,可以應用于各種不同應用的測試模型。這樣,計算機就比人更適合完成測試任務。另一方面,手工測試也存在一些局限性:手工測試無法做到覆蓋所有代碼路徑;如果有大量(幾千)的測試用例,需要在短時間內(1天)完成,手工測試幾乎不可能做到。自動化所能帶來的核心價值就是“效率”。本文通過介紹基于金航數碼自動化測試框架的自動化測試用例的實現(xiàn)方式,闡述如何提高自動化測試用例開發(fā)效率。
自動化測試有別于手工測試,其特點在于需要開發(fā)自動化測試用例(編寫測試代碼),類似于TestNG[1](一個常用的自動化測試執(zhí)行框架),這些框架過分注重“框架”的功能,強調框架即應用程序的代碼開發(fā)架構,開發(fā)工作就是向其中填入業(yè)務代碼。業(yè)內常見的測試框架良莠不齊,很多框架都是封裝5~6個類似TestNG這樣的工具,這些底層工具提供不同的功能,而框架的頂層規(guī)范了一種自身的測試用例的寫法,這樣開發(fā)人員無需了解底層框架的接口,只需掌握框架的用例編寫方式,即可完成測試用例的開發(fā)實現(xiàn)。這種自動化測試開發(fā)的模式,大多只注重了自動化測試執(zhí)行的實現(xiàn),并沒有關注自動化測試開發(fā),導致在自動化測試用例開發(fā)階段的工作效率較低,主要體現(xiàn)在以下三方面:
第一,開發(fā)代碼時,界面元素定位花費時間較多。界面元素定位過程是一個需要通過工具查看,分析出元素在界面中所處位置結構(像Web項目需要用“開發(fā)者工具”查看HTML結構),描述元素屬性特征,最終通過用代碼的形式使計算機識別并進行操作,這個過程不僅需要觀察和經驗,更需要反復嘗試。
第二,開發(fā)人員需要手工寫入大量的測試代碼。在定位好元素的描述信息和操作后,測試用例開發(fā)人員需要根據框架對腳本的規(guī)則編寫測試用例,編寫過程中即便有IDE等工具的幫助,也無法保證手工編寫的代碼沒有錯誤。另外,學習使用這些規(guī)則和編程技術有一定難度。
第三,在一個測試用例開發(fā)完成的時候,不能對測試流程進行可執(zhí)行性驗證。無論是JAVA代碼,還是不需要編譯的腳本語言,在開發(fā)測試用例的時候,很難通過及時的回放,驗證開發(fā)出來的測試代碼是否符合測試目標。這種開發(fā)模式需要完成一整段代碼后對腳本進行回放,如果在代碼段中出現(xiàn)一段錯誤,就需要修改并重新執(zhí)行之前的代碼,導致開發(fā)時間不必要的延長。
2.1自動化測試框架概述
金航數碼自動化測試框架提供一組抽象構件與構件實例間交互的方法,以及一套測試自動化相關問題的解決方案。自動化測試框架由自動化測試開發(fā)系統(tǒng)和自動化測試管理端兩部分組成。自動化測試開發(fā)系統(tǒng)通過“錄制-回放”的方式開發(fā)自動化測試用例,錄制是以通過記錄用戶鼠標、鍵盤操作的方式自動生成測試代碼,生成過程不需要手工編寫程序,自動生成的測試用例可以在本地回放,也可上傳到Web管理端遠程測試執(zhí)行。Web管理端是自動化測試各環(huán)節(jié)的全程可視化管理工具,能夠在無人值守的情況下,完成測試環(huán)境準備、測試用例分發(fā)部署、測試結果收集并自動生成測試報告,能夠加速測試效率,縮短測試周期。金航數碼自動化測試框架如圖1所示。
圖1 測試框架
2.2自動化測試用例開發(fā)的基礎-界面元素定位
界面元素定位被認為是自動化測試用例開發(fā)的基礎,通過設計開發(fā)元素定位的工具,能夠抓取到特定的瀏覽器或被測程序界面的元素結構,并通過記錄用戶鼠標、鍵盤的操作行為[2],即鍵盤、鼠標所觸發(fā)的事件,自動給出元素的定位方式和信息。元素的定位信息具有唯一性,在監(jiān)聽到事件并由框架自動生成出元素的定位信息后,如果框架自動檢查的結果是多個界面元素,通過添加自身屬性或從其父類元素屬性,然后再次進行驗證,重復這一過程,直至獲得一個最簡潔的且是唯一的界面元素。元素定位信息可以設定屬性偏好,每個被測系統(tǒng)的開發(fā)風格不一致,比如用EasyUI開發(fā)的Web前端HTML的格式十分固定,但Id屬性的意義不明顯,常規(guī)的Xpath表達式(像FireFox的FirePath生成的Xpath表達式)生成工具[4]不能解決這個問題。金航數碼的開發(fā)工具會自動記錄屬性偏好,可以把這種模式預先保存到框架中,在識別到這種結構時給出預先設定,尤其在用戶主動糾正某個Xpath表達式之后。
2.3測試用例自動生成
準備好界面元素定位信息和測試數據后,就可以生成測試用例了。測試用例由測試數據和測試腳本組成。測試數據包括界面元素定位信息和測試過程中用到的數據。測試腳本是使用Java語言編寫的代碼,按照關鍵字驅動[3]規(guī)則編寫,描述了測試執(zhí)行的流程。測試數據與測試腳本分離的設計,使測試用例形成一個較小粒度的測試程序,在HP ALM中叫做應用程序空間[5]。測試腳本調試的最大困難在于,如何使每一行代碼,都能像一個獨立的應用程序一樣執(zhí)行。測試執(zhí)行依賴于被測程序,被測程序的運行依賴于瀏覽器、模擬器,所以即便開發(fā)出來的代碼正確,執(zhí)行成功與否也要取決于被測程序的狀態(tài)(例如:界面和時效),框架會為這個被測程序創(chuàng)建一個session連接,通過這個鏈接與被測程序產生關聯(lián),這個session在記錄被測程序鼠標事件外,還可以通過回放部分已生成的測試代碼來進行調試。調試時,只需通過手動調整被測程序,再通過session來操來執(zhí)行測試。因為設計框架之初采用Java作為腳本語言,所以在測試腳本調試時就需要設計一個這樣的流程:把要執(zhí)行的代碼存放在一個Class中→通過JDK 編譯成class文件→使用自定義類加載器加載到虛擬機中→實例化執(zhí)行對象并注入環(huán)境變量→建立與被測程序的連接session。
用例自動生成程序會根據記錄用戶操作的流程和其他測試資源寫入不同的數據庫中。在遠程測試執(zhí)行的時候,遠程測試機根據需要把這些資源下載到本地,編譯執(zhí)行。
由于采用自動定位的方式,使得記錄一個元素操作從首次定位、多次迭代到測試腳本的生成過程,處理時間壓縮到3秒鐘以內(即便處理復雜的多frame頁面),只需鼠標點擊界面操作,更重要的是這些定位信息和代碼都通過了測試驗證,由于驗證程序和測試執(zhí)行程序使用同一段代碼邏輯,避免了生成的定位信息和代碼執(zhí)行時不匹配的現(xiàn)象,較好的保持了從開發(fā)用例到用例執(zhí)行的一致性。自主研發(fā)框架的定位功能還有一個優(yōu)勢就是根據行業(yè)產品的特征,可以定制自己的偏好,生成符合產品風格的定位信息。
測試用例自動生成的直觀好處可降低開發(fā)用例人員的投入成本,開發(fā)者無需了解框架底層工具的具體實現(xiàn),更不用掌握具體測試用例的編寫規(guī)則以及編程技術,從而更關注測試用例的設計本身。在自動生成測試用例的同時把測試腳本與測試數據分離儲存,通過同步測試管理系統(tǒng),使遠程測試部署執(zhí)行,用例維護起來更加便捷。
測試腳本動態(tài)的調試,使每一行測試代碼都可以作為單獨的測試程序運行,這個測試程序包含了測試數據、定位信息等,這也正是快速迭代開發(fā)用例的方式,拋棄舊的調試流程(即:開發(fā)一個完整流程的測試用例→整段代碼調試→修改錯誤→恢復被測程序場景→再次執(zhí)行),改為以極小的代碼段進行調試執(zhí)行,使測試用例開發(fā)時間縮短為之前的1/4左右。
元素自動定位、代碼自動生成以及腳本動態(tài)調試等這些工具所共同構成的用例開發(fā)方式,可以明顯降低開發(fā)自動化測試用例的時間,并且一定程度上降低了自動化測試框架的使用門檻,從而快速反饋軟件質量。
[1] Beust.C,Suleiman.H .Next generation Java testing:TestNG and advanced concepts[M].2007.
[2] 姚礪,束永安.基于Java的捕獲/回放測試工具的實現(xiàn)[J].計算機工程,2003(15).
[3] 管小娟,周誠,錢炫宇,劉時敏.基于驅動的自動化測試研究與應用[J].計算機技術與發(fā)展,2014(02).
[4] 劉斌,張曉婧.Web信息抽取系統(tǒng)的設計[J].微型電腦應用,2013(03).
[5] 王振華.復雜工作流軟件自動化測試方法的研究[D].復旦大學,2009.
Research and implementation of test case based on automated testing framework
TP311.1
A
1009-0134(2016)06-0147-02
2016-04-19
朱煥亮(1974 -),男,高級工程師,碩士,主要從事工業(yè)軟件研發(fā)工作。