馮小梅 孫衛(wèi)寧 曾蘭
【摘 要】為了及早發(fā)現(xiàn)和解決系統(tǒng)出現(xiàn)的問題,保證系統(tǒng)的質(zhì)量,通過持續(xù)集成和自動(dòng)化測試相結(jié)合的方式,設(shè)計(jì)并實(shí)現(xiàn)了持續(xù)集成自動(dòng)化測試方案,采用持續(xù)集成工具Jenkins搭建持續(xù)集成平臺(tái),使用maven實(shí)現(xiàn)自動(dòng)化構(gòu)建和selenium實(shí)現(xiàn)測試功能,能自動(dòng)化完成編譯、測試、部署和發(fā)布過程,無需人工干預(yù),做到集成和測試過程完全自動(dòng)化,從而提高開發(fā)和測試效率。
【關(guān)鍵詞】持續(xù)集成;自動(dòng)化測試;selenium;Jenkins;maven
【中圖分類號(hào)】TP311.52 【文獻(xiàn)標(biāo)識(shí)碼】A 【文章編號(hào)】1674-0688(2016)01-0043-04
由于很多bug在項(xiàng)目的早期就存在,到最后集成的時(shí)候才發(fā)現(xiàn)問題,然后找原因解決bug,會(huì)耗費(fèi)大量的時(shí)間與精力。通過maven和Jenkins實(shí)現(xiàn)系統(tǒng)持續(xù)集成,每次的集成都是通過自動(dòng)化的構(gòu)建來驗(yàn)證,包括自動(dòng)編譯、測試和部署,從而盡快地發(fā)現(xiàn)集成錯(cuò)誤,讓團(tuán)隊(duì)能夠更快地開發(fā)內(nèi)聚的軟件[1]。在持續(xù)集成里不再只是編譯和連接,創(chuàng)建還應(yīng)該包括自動(dòng)化測試,自測試的代碼是開發(fā)人員提交源碼的時(shí)候同時(shí)提交的,將所有的這些自測試代碼整合到一起形成測試集,在所有的最新的源碼通過編譯和連接之后還必須通過這個(gè)測試集的測試才算是成功的創(chuàng)建。而selenium是一套自動(dòng)化測試框架,可以用于單元測試、回歸測試、冒煙測試、集成測試、驗(yàn)收測試等[3],可以完成持續(xù)集成中的測試功能。文獻(xiàn)[2]采用持續(xù)集成的方式,使用Jenkins對相關(guān)的自動(dòng)化集成部署進(jìn)行了嘗試。文獻(xiàn)[3]通過Selenium的基本組件及實(shí)現(xiàn)測試原理,實(shí)現(xiàn)在B/S架構(gòu)應(yīng)用系統(tǒng)上進(jìn)行自動(dòng)化測試。文獻(xiàn)[4]通過selenium的平臺(tái)無關(guān)行和易操作性,研究能夠直接在瀏覽器中運(yùn)行,多語言多平臺(tái)支持的低耦合測試框架,該框架主要針對如何降低腳本之間的耦合性,如何靈活地組合不同的腳本,以及如何快速地定位腳本的錯(cuò)誤的問題來適應(yīng)如今web應(yīng)用開發(fā)中需求頻繁變動(dòng)的問題。本文通過持續(xù)集成和自動(dòng)化測試相結(jié)合的方式,設(shè)計(jì)持續(xù)集成自動(dòng)化測試方案,能自動(dòng)化完成編譯、測試、部署和發(fā)布過程,做到集成和測試過程完全自動(dòng)化。
1 相關(guān)知識(shí)介紹
Jenkins是java開發(fā)的持續(xù)集成工具,能快速且高頻率地自動(dòng)構(gòu)建項(xiàng)目的源代碼,每次通過自動(dòng)化的編譯、測試、審查、打包和部署,并創(chuàng)建集成報(bào)告發(fā)送給相關(guān)人員。Jenkins與主流的構(gòu)建工具、版本控制系統(tǒng)及自動(dòng)化測試框架都能進(jìn)行很好的支持,而且提供了靈活的插件擴(kuò)展框架。
Maven是一個(gè)項(xiàng)目管理和構(gòu)建自動(dòng)化工具,它的服務(wù)之一是完成構(gòu)建,從代碼清理、編譯、測試、打包和部署。Maven還是依賴管理工具,它提供了中央倉庫,幫我們下載、組織和管理組件,通過一組坐標(biāo)maven就能夠找到任何一個(gè)Java類庫。Maven抽象了構(gòu)建生命周期,實(shí)際需要插件來完成任務(wù),這一過程是通過將插件的目標(biāo)(goal)綁定到生命周期的具體階段(phase)來完成的。如:將maven-compiler-plugin插件的compile目標(biāo)綁定到default生命周期的compile階段,完成項(xiàng)目的源代碼編譯。絕大部分的構(gòu)建任務(wù)提供了已實(shí)現(xiàn)的插件,不再需要定義過程,例如測試,只需要遵循maven的約定編寫好測試用例,運(yùn)行構(gòu)建時(shí)測試便會(huì)自動(dòng)運(yùn)行。default生命周期的內(nèi)置插件綁定關(guān)系及具體任務(wù)如圖1所示。
Selenium是一套基于WEB應(yīng)用的測試工具,支持多種瀏覽器,通過它來執(zhí)行模仿用戶在網(wǎng)頁上的操作的測試腳本,Selenium 包含Selenium IDE、Selenium WebDriver、Selenium Remote Control(RC)和Selenium Grid等工具,可以用于單元測試、回歸測試、冒煙測試、集成測試、驗(yàn)收測試等。
2 框架設(shè)計(jì)
持續(xù)集成自動(dòng)化測試系統(tǒng)的目的是通過啟用和觸發(fā),將提交代碼、構(gòu)建、測試、發(fā)送報(bào)告整個(gè)過程自動(dòng)化完成,其框架如圖2所示。
持續(xù)集成系統(tǒng)大致分為以下幾個(gè)部分。
源代碼:源代碼是個(gè)maven project,使用maven實(shí)現(xiàn)自動(dòng)化構(gòu)建和對構(gòu)件進(jìn)行管理,配置POM文件就能自動(dòng)從maven中央倉庫中下載我們所需要的selenium、junit等jar包,并自動(dòng)下載selenium、junit所依賴于其他的jar包。
版本庫:由版本控制系統(tǒng)SVN進(jìn)行管理,負(fù)責(zé)代碼的管理和版本的控制,能夠自動(dòng)檢測代碼的更新以及提取代碼提交者的信息。
持續(xù)集成工具Jenkins,完成持續(xù)構(gòu)建系統(tǒng),Jenkins可以監(jiān)視代碼庫,探測到代碼更新時(shí)自動(dòng)地運(yùn)行構(gòu)建和測試,并提供構(gòu)建報(bào)告給開發(fā)者。
3 實(shí)現(xiàn)
在開發(fā)平臺(tái)Eclipse中配置SVN和maven插件,在Eclipse中建maven項(xiàng)目,項(xiàng)目代碼結(jié)構(gòu)如圖3所示。
scr/main/java存放主代碼,scr/test/java存放測試類,pom.xml文件是整個(gè)項(xiàng)目的核心,定義了項(xiàng)目的基本信息,描述項(xiàng)目如何構(gòu)建和聲明項(xiàng)目依賴等,在pom.xml中加入junit、selenium等需要的依賴,maven會(huì)自動(dòng)訪問中央倉庫下載junit和selenium相關(guān)的jar包(如圖4所示)。
maven生命周期test階段是與maven-surefire-plugin的test目標(biāo)綁定,我們設(shè)置maven-surefire-plugin的test目標(biāo)自動(dòng)執(zhí)行測試源代碼路徑(scr/
test/java)下所有符合一組命名模式的測試類,這組模式為*Test.java,只要將測試類按上述模式命名,maven就能自動(dòng)運(yùn)行測試代碼,pom.xml配置如圖5所示。
使用selenium WebDriver提供的接口編寫測試代碼,實(shí)現(xiàn)打開瀏覽器,控制瀏覽器頁面上的鍵盤輸入和鼠標(biāo)點(diǎn)擊等操作,再捕獲操作結(jié)果元素,例如某些屬性作為返回結(jié)果,通過判斷返回結(jié)果與預(yù)期是否一致來判定是否運(yùn)行正確,部分代碼如圖6所示。
之后是在Jenkins中構(gòu)建,在搭建好的Jenkins平臺(tái)中配置svn、maven和tomcat插件,例如配置SVN庫的用戶名、密碼和maven的MAVEN_HOME值等,之后新建一個(gè)maven類型的job(如圖7所示)。
構(gòu)建結(jié)果如圖8所示。
也可以配置job,讓job每天中的某時(shí)刻自動(dòng)構(gòu)建,同時(shí)將構(gòu)建好的web.war發(fā)布到tomcat中,自動(dòng)化完成一系列步驟,從svn庫中抓取代碼,編譯、測試到生成報(bào)告,再到打包和部署。
4 結(jié)語
本文設(shè)計(jì)和實(shí)現(xiàn)了持續(xù)集成自動(dòng)化測試方案,采用持續(xù)集成工具Jenkins搭建持續(xù)集成平臺(tái),使用maven實(shí)現(xiàn)自動(dòng)化構(gòu)建和selenium實(shí)現(xiàn)測試功能,能自動(dòng)化完成編譯、測試、部署和發(fā)布過程,無需人工干預(yù),做到集成和測試過程完全自動(dòng)化,從而提高開發(fā)和測試效率。
參 考 文 獻(xiàn)
[1]段清蛇,李筠.基于Jenkins的持續(xù)集成測試環(huán)境插件開發(fā)[J].信息技術(shù),2013(10):114-116,120.
[2]高珺.以持續(xù)集成方式進(jìn)行系統(tǒng)自動(dòng)化部署[J].華東師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2015(z1):373-377.
[3]吳伶琳.基于Selenium的軟件自動(dòng)化測試的研究與應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2013(2):65-68.
[4]邊耐政,張琳.一種基于Selenium的Web自動(dòng)化測試低耦合框架[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(8):13-16,37.
[責(zé)任編輯:鐘聲賢]