馮小梅 孫衛寧 曾蘭



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