李菲,楊君,曹陽(yáng),顧問(wèn)
(三江學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院,南京 210012)
云計(jì)算以虛擬化、面向服務(wù)的計(jì)算和網(wǎng)格計(jì)算等成熟技術(shù)為基礎(chǔ),以大規(guī)模資源共享為目標(biāo),采用數(shù)量較多的高性能PC或小型服務(wù)器等較為便宜的硬件構(gòu)建分布式服務(wù)器集群,提供可用性、可伸縮性都很強(qiáng)的計(jì)算服務(wù)[1]??蛻舳烁鶕?jù)自身需要,通過(guò)瀏覽器等標(biāo)準(zhǔn)程序訪問(wèn)發(fā)布在互聯(lián)網(wǎng)之上、以服務(wù)形式提供的計(jì)算能力、軟件、存儲(chǔ)服務(wù)、中間件平臺(tái)等。云計(jì)算的服務(wù)方式包括基礎(chǔ)設(shè)施即服務(wù)IaaS、平臺(tái)即服務(wù)PaaS、軟件即服務(wù)SaaS三類典型的服務(wù)方式。
云測(cè)試是基于云計(jì)算的一種測(cè)試方案,有效利用云計(jì)算環(huán)境資源對(duì)其他軟件進(jìn)行測(cè)試。一般分為兩種:一是利用云端服務(wù)器中的測(cè)試軟件進(jìn)行測(cè)試,使用者通過(guò)遠(yuǎn)程桌面鏈接到服務(wù)器內(nèi)的虛擬機(jī),直接打開(kāi)虛擬機(jī)內(nèi)的測(cè)試軟件和Web瀏覽器來(lái)測(cè)試本機(jī)或公網(wǎng)上的Web軟件;二是利用云端的服務(wù)器的環(huán)境系統(tǒng),用于兼容性或國(guó)際化測(cè)試,例如服務(wù)提供商提供手機(jī)測(cè)試平臺(tái),對(duì)手機(jī)App進(jìn)行各類操作系統(tǒng)、硬件的兼容測(cè)試。這些云測(cè)試平臺(tái)的優(yōu)點(diǎn)是平臺(tái)和瀏覽器覆蓋很廣,用戶按需付費(fèi)。但商用云測(cè)試平臺(tái)的缺陷也較明顯:
(1)云平臺(tái)的安全性,基于信息安全的考慮,企業(yè)產(chǎn)品只會(huì)在本地私有云中進(jìn)行測(cè)試,商用云測(cè)試平臺(tái)無(wú)法滿足要求;
(2)測(cè)試中出現(xiàn)的故障,使用商用云平臺(tái)無(wú)法調(diào)試,測(cè)試中出現(xiàn)的錯(cuò)誤可能是測(cè)試腳本的錯(cuò)誤,也可能是被測(cè)系統(tǒng)SUT的錯(cuò)誤,不能較好地區(qū)分;
(3)基于UI的自動(dòng)化測(cè)試通常會(huì)有不穩(wěn)定的情況,本地編輯好的自動(dòng)化腳本可能問(wèn)題較多,無(wú)法在商用云平臺(tái)上正常運(yùn)行;
(4)商用云測(cè)試平臺(tái)只能做一些共性的測(cè)試,針對(duì)小型產(chǎn)品特點(diǎn)靈活定制的工作較少,或收費(fèi)昂貴。敏捷開(kāi)發(fā)要求快速響應(yīng),持續(xù)集成、持續(xù)測(cè)試這些關(guān)鍵開(kāi)發(fā)手段必須在云測(cè)試平臺(tái)中體現(xiàn)。
基于上述的問(wèn)題,應(yīng)根據(jù)產(chǎn)品實(shí)際特點(diǎn)選擇云測(cè)試平臺(tái),盡管商用云測(cè)試平臺(tái)兼容性強(qiáng)、覆蓋廣泛,可以覆蓋所有的瀏覽器和平臺(tái),但互聯(lián)網(wǎng)的公司產(chǎn)品發(fā)布較快,實(shí)際根據(jù)帕累托80/20原則,在各產(chǎn)品測(cè)試中只需要覆蓋主流瀏覽器、平臺(tái)。
隨著敏捷實(shí)踐被越來(lái)越多地采用,在每次迭代中重新執(zhí)行手動(dòng)測(cè)試成為了一種不可持續(xù)的模式。沒(méi)有足夠的時(shí)間,無(wú)法增加更多人力執(zhí)行手動(dòng)測(cè)試。自動(dòng)化測(cè)試則是相對(duì)手動(dòng)測(cè)試而存在的一個(gè)概念,通過(guò)各類測(cè)試工具、測(cè)試套件、測(cè)試腳本,部署測(cè)試環(huán)境,具有良好的可操作性、可重復(fù)性和高效率等特點(diǎn),是軟件測(cè)試不可分割的一部分[2]。測(cè)試自動(dòng)化主要應(yīng)用在性能測(cè)試、兼容性測(cè)試、回歸測(cè)試等方面,貫穿在整個(gè)軟件測(cè)試階段。云計(jì)算環(huán)境下的軟件測(cè)試自動(dòng)化過(guò)程包括:根據(jù)測(cè)試需求制定測(cè)試計(jì)劃,設(shè)計(jì)測(cè)試腳本;根據(jù)云資源部署自動(dòng)化測(cè)試環(huán)境并執(zhí)行測(cè)試;分析得到的測(cè)試報(bào)告并反饋給相關(guān)人員。
在性能測(cè)試中,測(cè)試環(huán)境配置要求較高,測(cè)試人員在測(cè)試前需要花費(fèi)較長(zhǎng)時(shí)間搭建一個(gè)性能環(huán)境,且無(wú)法固化測(cè)試環(huán)境,測(cè)試結(jié)束后環(huán)境即被拆除,下一輪測(cè)試前又要重新搭建,因此能快速提供性能測(cè)試環(huán)境就顯得非常重要。借助云資源自動(dòng)化創(chuàng)建和配置測(cè)試環(huán)境,可以將測(cè)試準(zhǔn)備工作從幾小時(shí)或幾天縮短至幾分鐘,也減少了由于測(cè)試環(huán)境問(wèn)題、錯(cuò)誤地安裝依賴軟件,以及其他引入問(wèn)題的手動(dòng)流程所導(dǎo)致的虛假錯(cuò)誤數(shù)量。
在兼容性測(cè)試中,測(cè)試重點(diǎn)在功能兼容和軟件兼容,被測(cè)軟件與操作系統(tǒng)、Web瀏覽器或其他操作環(huán)境應(yīng)保持兼容,遵守軟件之間的標(biāo)準(zhǔn)和規(guī)范,與其他平臺(tái)進(jìn)行交互共享信息。兼容性測(cè)試需要使用多套測(cè)試環(huán)境,基于云的自動(dòng)化測(cè)試,可使用云資源迅速搭建多套測(cè)試環(huán)境,使測(cè)試不受限于物理資源的束縛。
基于上述商用云測(cè)試平臺(tái)的優(yōu)缺點(diǎn),以及云測(cè)試自動(dòng)化的考慮,可以設(shè)計(jì)一個(gè)云測(cè)試平臺(tái),它是云計(jì)算技術(shù)提供測(cè)試服務(wù)提供的載體,測(cè)試提供者將可調(diào)用的測(cè)試資源部署在服務(wù)器上,并向用戶提供調(diào)用接口,用戶通過(guò)云測(cè)試平臺(tái)的前端創(chuàng)建測(cè)試項(xiàng)目,完成測(cè)試計(jì)劃管理、測(cè)試腳本上傳、測(cè)試用例執(zhí)行和測(cè)試結(jié)果展現(xiàn)[3]。云測(cè)試平臺(tái)底層采用虛擬機(jī)技術(shù),通過(guò)整合物理資源形成虛擬資源池,實(shí)現(xiàn)對(duì)資源池中虛擬資源的動(dòng)態(tài)調(diào)度,在保證資源均衡優(yōu)化的基礎(chǔ)上,測(cè)試平臺(tái)提供給測(cè)試人員完成回歸測(cè)試、性能測(cè)試、兼容性測(cè)試的自動(dòng)化工作,同時(shí)引入持續(xù)測(cè)試的思想,利用計(jì)劃編排工具有效調(diào)度測(cè)試任務(wù),完成測(cè)試工作。
設(shè)計(jì)的云測(cè)試平臺(tái)共分為5個(gè)部分,分別由物理設(shè)備、虛擬資源池、云資源管理節(jié)點(diǎn)、云測(cè)試前臺(tái)服務(wù)器、用戶Web操作組成。其中前三者屬于IaaS層,提供計(jì)算和存儲(chǔ)資源管理虛擬云測(cè)試服務(wù)器;后兩者屬于PaaS層,使用IaaS資源,面向云測(cè)試用戶。云測(cè)試平臺(tái)架構(gòu)如圖1所示。
圖1 體系結(jié)構(gòu)圖
云測(cè)試平臺(tái)的硬件使用兩臺(tái)x86架構(gòu)的PC Server組成,成本較低,后續(xù)隨業(yè)務(wù)發(fā)展而動(dòng)態(tài)擴(kuò)展資源[4]。一臺(tái)服務(wù)器配置做為控制節(jié)點(diǎn),標(biāo)記為node1,另外一臺(tái)做計(jì)算節(jié)點(diǎn),標(biāo)記為node2。服務(wù)器硬件配置CPU為Intel Xeon,內(nèi)存16GB,硬盤1TB(可擴(kuò)展為RAID磁盤),網(wǎng)卡為千兆雙網(wǎng)卡。云測(cè)試平臺(tái)配置云計(jì)算管理平臺(tái)、虛擬機(jī)、操作系統(tǒng)分別采用OpenStack Essex、KVM 1.0、CentOS 7.2。
基于回歸測(cè)試、性能測(cè)試和兼容性測(cè)試的需要,云測(cè)試平臺(tái)采用開(kāi)源工具。Selenium是目前主流的Web自動(dòng)化測(cè)試工具,可用于功能測(cè)試和系統(tǒng)兼容性測(cè)試,Selenium IDE可自動(dòng)錄制測(cè)試步驟,Selenium Grid支持在多臺(tái)機(jī)器上并行執(zhí)行測(cè)試,測(cè)試用例能夠同時(shí)在多種操作系統(tǒng)的多種瀏覽器上執(zhí)行,其中一臺(tái)主機(jī)(Hub)控制測(cè)試用例在其他不同主機(jī)(Node)不同瀏覽器下運(yùn)行[5]。JMeter是開(kāi)源的性能測(cè)試工具代表,可模擬大量并發(fā)負(fù)載來(lái)進(jìn)行強(qiáng)度測(cè)試,分布式環(huán)境下的JMeter性能測(cè)試會(huì)選擇一臺(tái)主機(jī)(Controller)控制其他主機(jī)(Agent)執(zhí)行測(cè)試腳本。出于上述測(cè)試自動(dòng)化調(diào)度需要,本系統(tǒng)采用Jenkins持續(xù)集成工具,提供持續(xù)、自動(dòng)的構(gòu)建及測(cè)試軟件項(xiàng)目,監(jiān)控定時(shí)執(zhí)行的任務(wù)[6]。
PaaS層的前臺(tái)服務(wù)器使用Struts2和Hibernate框架,采用 Java JDK 1.7、MySQL 6.0、Tomcat 7。前臺(tái)服務(wù)器調(diào)用OpenStack的API接口獲取IaaS層的消息和運(yùn)行狀態(tài),用戶通過(guò)Web界面進(jìn)行開(kāi)啟、關(guān)閉虛擬測(cè)試服務(wù)器等操作實(shí)際都是調(diào)用API。
云測(cè)試平臺(tái)按功能劃分為前臺(tái)服務(wù)器和后臺(tái)云管理平臺(tái),前臺(tái)服務(wù)器提供Web交互界面,測(cè)試人員在該界面管理測(cè)試腳本、操作測(cè)試流程,查看測(cè)試結(jié)果;后臺(tái)管理平臺(tái)調(diào)度虛擬機(jī)、運(yùn)行測(cè)試腳本、反饋測(cè)試報(bào)告。
前臺(tái)服務(wù)器的主要功能包括賬戶管理(注冊(cè)、登錄、注銷、修改密碼)、測(cè)試項(xiàng)目管理(創(chuàng)建測(cè)試項(xiàng)目、查詢測(cè)試項(xiàng)目、刪除測(cè)試項(xiàng)目)、測(cè)試腳本管理(添加測(cè)試腳本、刪除測(cè)試腳本、保存測(cè)試腳本、查詢測(cè)試腳本)、測(cè)試結(jié)果管理(測(cè)試結(jié)果查詢、測(cè)試結(jié)果下載)。
后臺(tái)管理平臺(tái)將虛擬機(jī)分為測(cè)試控制機(jī)和測(cè)試執(zhí)行機(jī)兩類角色,控制機(jī)用于對(duì)測(cè)試流程的管理,執(zhí)行機(jī)用于執(zhí)行測(cè)試腳本,由多個(gè)虛擬化測(cè)試環(huán)境組成。自動(dòng)化測(cè)試任務(wù)通過(guò)Jenkins調(diào)度自動(dòng)進(jìn)行,因此需要在控制機(jī)上安裝Jenkins并集成Selenium Grid、JMeter插件,部署 Selenium Hub、JMeter Controller節(jié)點(diǎn);測(cè)試執(zhí)行機(jī)上則需要部署Selenium Node和JMeter Agent。當(dāng)Jenkins中創(chuàng)建的計(jì)劃任務(wù)被觸發(fā),后臺(tái)管理平臺(tái)上的測(cè)試控制機(jī)和測(cè)試執(zhí)行機(jī)開(kāi)始工作,協(xié)作完成測(cè)試任務(wù)。
用戶根據(jù)測(cè)試計(jì)劃和測(cè)試場(chǎng)景創(chuàng)建Jenkins相關(guān)測(cè)試任務(wù),在Web界面創(chuàng)建虛擬機(jī),部署性能測(cè)試、回歸測(cè)試、兼容性測(cè)試等測(cè)試環(huán)境,編寫(xiě)調(diào)試測(cè)試腳本并上傳,后臺(tái)管理平臺(tái)處于測(cè)試準(zhǔn)備就緒階段,前后臺(tái)消息交互的時(shí)序圖如圖2所示。
后臺(tái)測(cè)試控制機(jī)上設(shè)定的Jenkins Job定時(shí)時(shí)間到達(dá),控制機(jī)將測(cè)試腳本分發(fā)到測(cè)試執(zhí)行機(jī)上,如果是性能測(cè)試任務(wù),則在測(cè)試控制機(jī)上運(yùn)行JMeter Controller節(jié)點(diǎn),通過(guò)命令行遠(yuǎn)程開(kāi)啟測(cè)試執(zhí)行機(jī)上的JMeter Agent,進(jìn)行分布式測(cè)試;如果是Web功能測(cè)試或兼容性測(cè)試,則在控制機(jī)上運(yùn)行Selenium Hub,通過(guò)Hub節(jié)點(diǎn)下發(fā)操作命令給執(zhí)行機(jī)上的Selenium Node節(jié)點(diǎn),執(zhí)行Selenium腳本進(jìn)行測(cè)試;測(cè)試執(zhí)行機(jī)完成測(cè)試后將結(jié)果返回給測(cè)試控制機(jī),再由控制機(jī)傳遞給前臺(tái)服務(wù)器輸出給用戶。
圖2 前后臺(tái)消息交互時(shí)序圖
基于以上的流程,在實(shí)際Web項(xiàng)目測(cè)試中,使用這個(gè)云測(cè)試平臺(tái),可在Jenkins上創(chuàng)建多個(gè)性能測(cè)試任務(wù)、兼容性測(cè)試任務(wù)、回歸測(cè)試任務(wù),任務(wù)從晚間開(kāi)始自動(dòng)執(zhí)行,測(cè)試人員第二天上班從Jenkins上查看測(cè)試報(bào)告,軟件測(cè)試流程無(wú)人看守,實(shí)現(xiàn)了自動(dòng)測(cè)試。
本文研究了基于云計(jì)算的軟件測(cè)試自動(dòng)化技術(shù),借助OpenStack云計(jì)算管理平臺(tái)和Web服務(wù),采用任務(wù)調(diào)度工具Jenkins、開(kāi)源測(cè)試工具Selenium和JMeter設(shè)計(jì)了一個(gè)自動(dòng)化測(cè)試平臺(tái),能自動(dòng)化完成測(cè)試環(huán)境部署、測(cè)試腳本執(zhí)行和測(cè)試結(jié)果輸出,無(wú)需人工干預(yù),從而提高開(kāi)發(fā)和測(cè)試效率。但從持續(xù)集成方面看,還有一些工作未完善,例如可以結(jié)合Maven的版本編譯和部署功能完成自動(dòng)化構(gòu)建、自動(dòng)化編譯和自動(dòng)化測(cè)試,實(shí)現(xiàn)基于云計(jì)算環(huán)境的研發(fā)版本持續(xù)集成和持續(xù)改進(jìn);測(cè)試平臺(tái)輸出的Selenium、JMeter測(cè)試報(bào)告可以更規(guī)范更具體,形成郵件自動(dòng)發(fā)送,供測(cè)試人員查看。