文/何東
很多軟件項目都有一個非常奇怪而又常見的特征,即在開發(fā)過程里,應用程序在相當長的一段時間內(nèi)無法運行。大規(guī)模團隊開發(fā)軟件中,大多數(shù)公司只會在項目收尾階段才進行分支合并、試運行和驗收測試的工作,甚至還會發(fā)現(xiàn)軟件并不能滿足需求的情況。持續(xù)集成是一種根本的顛覆。在交付過程中,問題暴露的越早,修復代碼的成本越低,成功部署的概率就越大。持續(xù)集成高頻率地編譯、測試、審查、部署項目代碼,這其中代碼集成是主要的風險來源。因此用戶可以體會到持續(xù)集成在互聯(lián)網(wǎng)行業(yè)迅速發(fā)展的今天,是非常重要的。
設(shè)計并開發(fā)一個自動化的測試系統(tǒng),可以有效地幫助企業(yè)完成其整個的自動化測試過程,對整體的一個開發(fā)環(huán)境下某些特殊的軟件測試系統(tǒng)應該考慮如何能夠讓其進行全面的、完整的測試,這些都是新時代里自動化軟件測試領(lǐng)域里研究的焦點問題。本文對軟件自動化測試的相關(guān)技術(shù)進行了深入的分析研究,構(gòu)建了一個基于阿里云的持續(xù)集成方案,力圖從理論上和實用上獲得研究進展。
應用需求規(guī)模越是增加就造成需求變化越是頻繁,這種情況的產(chǎn)生對于軟件開發(fā)提出了更高的要求,通過持續(xù)集成敏捷軟件開發(fā)方法能夠為企業(yè)提供解決的方案。引入迭代式的開發(fā)方法將軟件生命周期分成幾個小的迭代周期過程,使得在開發(fā)過程中能夠?qū)ψ兓龀隹焖俚捻憫?,為了應對變化的問題敏捷過程在每個迭代周期過程完成之后為用戶提供階段成果,在用戶對階段性結(jié)果提出針對性的修改,滿足用戶的需求。軟件開發(fā)過程中的多變性的需求也使得版本的時間周期作出調(diào)整,在邏輯復雜、需求多變、時間緊迫的開發(fā)任務(wù)之下,敏捷軟件開發(fā)方法不斷的進行設(shè)計改進和測試,通過多輪的更改和修正,從而實現(xiàn)項目過程中變化所帶來的成本的下降。因此持續(xù)集成受到軟件代碼程序員的支持成為了現(xiàn)階段軟件工作中不可或缺的內(nèi)容。持續(xù)集成模式如圖1所示。
阿里云是阿里巴巴官方的云服務(wù)平臺,也有著大量的開源產(chǎn)品,這對于某公司后續(xù)的二次開發(fā)具有重要的意義。阿里云Eclipse插件(Aliyun Toolkit for Eclipse)是阿里云官方提供的適用于Eclipse Java集成開發(fā)環(huán)境的應用插件,致力于為廣大開發(fā)者提供一站式解決方案,它集成了三部分功能:阿里云產(chǎn)品圖形界面、阿里云Java應用向?qū)Ш桶⒗镌撇渴?發(fā)布工具。阿里云eclipse插件能夠讓開發(fā)人員更為輕松地使用阿里云系列產(chǎn)品進行開發(fā)、調(diào)試和部署 Java 應用程序。借助阿里云Eclipse插件,可以更加快速構(gòu)建阿里云應用程序,并提高生產(chǎn)力。
3.1.1 云產(chǎn)品資源管理和查詢
云產(chǎn)品圖形界面集成了大部分阿里云管理控制臺功能,在開發(fā)應用程序時,能夠輕松訪問和管理賬戶下的云資產(chǎn),包括ECS、RDS、OSS等所有類型的阿里云基礎(chǔ)設(shè)施產(chǎn)品。
3.1.2 阿里云部署&發(fā)布工具
當使用阿里云Java應用向?qū)Щ蜃孕型瓿杀镜仨椖块_發(fā)后,借助于用戶提供的阿里云部署&發(fā)布工具,可以輕松的將本地的Java應用部署到線上阿里云產(chǎn)品中,從而可以對線上環(huán)境中運行的應用程序進行遠程調(diào)試。
3.1.3 阿里云Java應用向?qū)?/p>
阿里云Eclipse插件包含了適用于Java的阿里云SDK工具包,方便從無到有的在Eclipse內(nèi),構(gòu)建基于阿里云產(chǎn)品的應用服務(wù),包括ECS、RDS、ESS等多種Java應用程序。
阿里云插件配置主要由圖片上傳工具osscmd安裝、項目配置以及上傳三個步驟。osscmd是基于 Python 2.x 的命令行工具,支持Bucket管理、文件管理等功能。
如圖2所示,其中圖片上傳工具osscmd的安裝,是把本地相對路徑static/下的包上傳到oss://qy-staticresources/website/里,并做md5校驗,然后進行相關(guān)項目的后續(xù)配置。
第二步是對項目maven進行打包,項目maven打包的過程實際上是對插件的文件進行打包,同時也檢驗打包的空間是否滿足要求。項目maven打包如圖3所示。
第三步是,上傳至OSS(Object Storage Service)。在OSS中,用戶操作的基本數(shù)據(jù)單元是文件對象(Object)。單個文件的最大允許大小是根據(jù)上傳數(shù)據(jù)方式不同而不同的,如Put Object方式文件最大不能超過5GB。上傳至OSS如圖4所示。
圖1:持續(xù)集成
圖2:上傳工具osscmd安裝
圖3:項目maven打包
針對基于阿里云的持續(xù)集成系統(tǒng)進行的功能和系統(tǒng)開發(fā),目的是為判定該系統(tǒng)所具有的功能是否正確。本測試為保證軟件的正常運行,服務(wù)器端選用了較高的軟硬件配置,客戶端采用商用的工作站,具體配置如下:
軟件配置環(huán)境主要是:
客戶端配置:Windows7操作系統(tǒng)
瀏覽器配置:Internet Explorer8.0
服務(wù)器軟件配置環(huán)境:
jenkens服務(wù)器;
ARP解析防火墻;
Resin-3.0.27;
SQLServer2013等。
基于阿里云持續(xù)集成系統(tǒng)的功能模塊,結(jié)合對于需求的分析我們可以將系統(tǒng)架構(gòu)分為三層:第一層是用戶接口層,第二層是適配處理層,第三層是下載處理層。
用戶接口層屬于直接對接用戶的層次,主要是針對用戶的操作進行實現(xiàn),屬于協(xié)議中系統(tǒng)應用層,用戶可以通過安裝模塊實現(xiàn)全局配置;下載處理層則是將軟件版本與路由器端口對應,通過更新路由器新版本實現(xiàn)系統(tǒng)重啟升級;適配處理層在在下載層和用戶接口層之間,主要是將兩層的數(shù)據(jù)相連接,通過處理可以實現(xiàn)兩層之間數(shù)據(jù)的傳輸?;诎⒗镌瞥掷m(xù)集成系統(tǒng)的適配處理層需要同時實現(xiàn)多個路由器版本升級,因此在下載需求配置時需要多線程模塊同時進行。結(jié)果報告模塊顯示命令行的結(jié)果,向用戶展示集成的結(jié)果。
在功能層面,基于阿里云的持續(xù)集成系統(tǒng)功能模塊主要分為三個功能模塊:構(gòu)建、自動化測試、持續(xù)集成系統(tǒng)。這三個模塊是構(gòu)建基于阿里云的持續(xù)集成系統(tǒng)最為基礎(chǔ)的三個內(nèi)容,因此本文基于構(gòu)建——自動化測試——持續(xù)集成系統(tǒng)三個功能模塊展開設(shè)計。
4.2.1 構(gòu)建
構(gòu)建主要通過初始化階段、用例執(zhí)行階段、報告生成階段三個階段實現(xiàn)。
(1)初始化階段:初始化階段主要是springbean的初始化以及解析頁面信息配置文件,最終初始化測試數(shù)據(jù);springbean的初始化包括bean容器ExecutionUtil的初始化,通過ShutDownHook類加入鉤子防止程序出現(xiàn)意外關(guān)閉的情況。加入主配置文件page.xml并導入文件流從而解析主配置文件,通過PageManager類設(shè)置頁面對象和瀏覽器配置信息,通過DatalnfoManager類設(shè)置頁面數(shù)據(jù)并關(guān)聯(lián)相關(guān)數(shù)據(jù)路徑,實現(xiàn)頁面對象信息的導入;最后頁面對象信息通過dataMap獲取對應的數(shù)據(jù),將數(shù)據(jù)值預設(shè)在對應對象上。
(2)例執(zhí)行階段:用例執(zhí)行階段作為整個測試過程最為核心的活動,主要是完成不同的業(yè)務(wù)邏輯測試。完成邏輯測試需要啟動測試過程監(jiān)聽器,通過不同狀態(tài)執(zhí)行監(jiān)聽對于各種測試情況進行反饋。通過從pageMap中取出相關(guān)頁面對象并獲取用戶名文本框?qū)ο螅瑢ξ谋究驅(qū)ο笸ㄟ^定位策略,定位到對應文本框元素;根據(jù)頁面對象通過定位策略定位到實際頁面按鈕進行點擊操作,到此業(yè)務(wù)邏輯操作完成。
(3)告生成階段:主要功能有對測試過程的日志進行整理、生成測試報告、發(fā)送郵件給相關(guān)人員。激活報告監(jiān)聽并調(diào)用TestNG框架并發(fā)送報告郵件給關(guān)系人。
4.2.2 自動化測試
自動化測試是持續(xù)集成系統(tǒng)最為重要的執(zhí)行過程,通過測試服務(wù)主程序ITest.sh,來對指定的測試計劃進行規(guī)劃并完成產(chǎn)品的測試工作。并通過每日構(gòu)建進行日常檢查。
圖4:上傳至OSS
通過日構(gòu)建進行檢查,在測試計劃文件中,通過plan_coverage.sh的功能有效排除不成功的平臺測試計劃,檢查構(gòu)建報告是日構(gòu)建之中最為重要地工作。檢查構(gòu)建報告,主要是在自動化測試前對構(gòu)建的結(jié)果報告進行分析,通過對構(gòu)建成功的產(chǎn)品進行分析,從而獲得自動化測試可行性。
4.2.3 持續(xù)集成系統(tǒng)
基于阿里云的持續(xù)集成系統(tǒng)的實現(xiàn),借助于流水線業(yè)務(wù)實現(xiàn)。通過集成、測試、以及部署上線整個流程不斷的觸發(fā)達到持續(xù)集成的效果,在持續(xù)集成的過程中流水線功能可以快速發(fā)現(xiàn)問題并及時修復,從而提升產(chǎn)品的可靠度。
定時啟動管理主要是通過持續(xù)集成的機制,不斷定時進行啟動。代碼完成——測試完成——驗收完成中所有流程的完成對于生產(chǎn)率的提升和測試有著重要的意義。
實時監(jiān)控是與定時啟動管理相互關(guān)聯(lián)的功能。實時監(jiān)控通過Jenkins實現(xiàn)了多任務(wù)同時運行,實時監(jiān)控和報告構(gòu)建形成最終的結(jié)果,在宏調(diào)用下通過循環(huán)的方式執(zhí)行各構(gòu)建周期。報告日志讀取存儲管理,在測試環(huán)境的自動部署完成之后執(zhí)行自動化測試,最終向相關(guān)人員發(fā)送測試結(jié)果報告。
本文立足于持續(xù)集成系統(tǒng)的實際功能需求,在介紹持續(xù)集成系統(tǒng)的基礎(chǔ)上進一步介紹阿里云插件設(shè)計原理以及基于阿里云的持續(xù)集成系統(tǒng)功能模塊的實現(xiàn),進而實現(xiàn)構(gòu)建——自動化測試——持續(xù)集成系統(tǒng)三個功能模塊的設(shè)計。本文的研究對于企業(yè)來說借助該系統(tǒng)能夠進行更為全面的、完整的測試,并將所有的過程完全的自動化,具有很強的應用價值。本文構(gòu)建了一個基于阿里云的持續(xù)集成方案,從理論上和實用上都具有一定價值。