隨著自動化測試在軟件行業(yè)的不斷深化以及持續(xù)集成的興起,幾乎所有的軟件都在不同程度上采用了自動化測試的方法,并且越來越多的軟件公司在軟件開發(fā)上引入了持續(xù)集成的方法。不過《軟件自動化測試與持續(xù)集成實踐》培訓(xùn)專家陸老師指出,隨著軟件迭代的次數(shù)的不斷增多,軟件質(zhì)量要求的不斷提高,傳統(tǒng)的自動化測試已經(jīng)不能滿足項目開發(fā)過程中對自動化測試效率的要求。陸老師在這里就自動化測試與持續(xù)集成的相關(guān)問題進行了探討。
一、什么是持續(xù)集成(Continuous Integration)?
這個概念到底是怎么定義,說實話很多不同的版本。這里我就把我理解的什么叫持續(xù)集成說下,其實持續(xù)集成是為了配合敏捷開發(fā)的速度和效率而產(chǎn)生的一個用于編譯、測試、發(fā)布、部署的工具。為什么叫持續(xù)呢?其實就是編碼人員提交了源碼,那么該工具就可以進行編譯,測試等一系列運作。怎么能夠讓編碼人員很快的知道編碼的異常。
二、工具的選擇Maven2 HudsonCruiseControl可以考慮)、SVN
首先我們來看看這個環(huán)境是怎么運作的吧! 編碼人員將代碼提交到SVN,那么Hudson就監(jiān)控到SVN有更新,那么Hudson就去SVN取出更新的源碼。取出后就交給Maven去編譯、測試、發(fā)布等操作。
所謂的持續(xù)集成通俗一點兒說:就是指對于開發(fā)人員的每一次代碼提交,都自動地把Repository中所有代碼Check out到一個空目錄,并且自動運行所有Test Case。如果成功則接受這次提交,否則告訴所有人,這是一個失敗的Revision
更具體的解釋可以參考Martin fowlerContinuous Integration
三、持續(xù)集成的價值與成本
所謂存在即為合理”。既然持續(xù)集成已經(jīng)存在了這么長的時間,而且沒有消失的跡象,那就是有價值的東西。
那么它的價值何在?有人概括如下:
(1) 減小風(fēng)險;(2) 減少手動過程;(3) 生成構(gòu)建結(jié)果;(4) 安全感。
而持續(xù)集成的成本在于對持續(xù)集成代碼的維護成本和集成的時間成本。因為隨著項目進行,軟硬件環(huán)境會越來越復(fù)雜,成品代碼也會不斷膨脹。此時,需要團隊而修改或增加原有的測試代碼,以適應(yīng)這些變化,同時,每次集成所需時間也會變長,這就是持續(xù)集成的成本。
某個blog中提道:“這種集成是如此的頻繁,多少次的代碼Commit就有多少次持續(xù)集成。前提是集成的成本很低,或者說是完全自動化的。”
四、持續(xù)集成應(yīng)該自動化什么呢?
我們要以盡可能少的成本來獲得盡可能多的價值。這就要考慮哪些自動化是必要的啦。
Jez Humble提到至少有六點要做到自動化,
它們分別是(1)自動化的運行測試;
(2) 自動產(chǎn)生可部署的二進制成品;
(3) 自動將成品自動部署到近似生產(chǎn)環(huán)境;
(4) 自動為CodeBase打上標(biāo)簽;
(5) 自動運行回歸測試;
(6)自動生成度量報告。
五、持續(xù)集成服務(wù)器的選擇
在進行持續(xù)集成實踐前,應(yīng)當(dāng)正確的選擇并配置持續(xù)集成服務(wù)器。比較成熟的持續(xù)集成服務(wù)器包括:CruiseControl, Anthill, Bamboo, TeamCity, Continuum 等。CruiseControl作為開源產(chǎn)品,以其對于各種SCM(源碼管理,制造業(yè)上是供應(yīng)鏈關(guān)系管理)以及構(gòu)建工具的廣泛支持而被許多開發(fā)團隊所接受。而開發(fā)自動化專家 Duvall 采用一致的評估標(biāo)準(zhǔn)和很多說明性示例,介紹了一些開源 CI 服務(wù)器,包括 ContinuumCruiseControl Luntbuild。并指出“要根據(jù) 自己的 具體技術(shù)和政策需求對工具進行分析”。并用以下五個指標(biāo)來評估CI工具,它們分別是:(1) 特性;(2) 可靠性;(3) 壽命;(4) 目標(biāo)環(huán)境;(5) 易用性。結(jié)果如下表:
六、只有持續(xù)集成服務(wù)器是遠遠不夠的
正如Jez Humble所說,CruiseControl和其它的CI工具本質(zhì)上只不過是一個定時器,時間一到,做你讓它做的事情。所以,必然要有其它工具與其結(jié)合,方顯持續(xù)集成的本色。
七、最重要的事:實踐與反思
也許這些東西大家都知道,而且有些人可能已經(jīng)實踐過啦。無論這些實踐的結(jié)果是怎樣的,一定不要忘記總結(jié)和反思。如果這些實踐成功了,不要把它歸功于這個工具,而是要總結(jié)一下為什么會成功,如果你愿意的話,還可以和大家分享一下。如果這些實踐失敗了,也不要把它歸功于這個工具,而是要反思一下,是否正確地使用了這個工具,團隊成員是否都喜歡這個工具,為什么?這也是每一個測試人員應(yīng)該思考的問題。