iT邦幫忙

DAY 11
1

探索 Jenkins-CI 從認識到應用系列 第 11

11. 生人勿進 - 單元測試與覆蓋度

單元測試與覆蓋度

Jenkins 最常見的應用,就是單元測試與測試覆蓋度了。因為這兩件事合起來,如果交給人類去執行,繳回來的報告,裡面可能一句話『老子(娘)不幹了』,這真的不是給人幹的

本篇同步發表於:http://www.gibar.co/2014/10/jenkins-cobertura-plugin.html
本篇相關外掛
Cobertura Plugin

目標情境

使用Maven + JUnit + Cobertura 完成自動化測試及測試覆蓋度

我們先看最終結果,要由Jenkins自動的產生以下這份報告,並以郵件方式發送




淺說Java+Maven怎麼寫測試

使用Eclipse產生Java Maven專案後,預設會就自動產生 src/main/java 與 src/test/java,很容易理解的,前者為主程式目錄,後者為測試程式目錄。範例中使用的是JUnit,我們在根目錄上可以找到 Maven 的 pom.xml ,增加JUnit的套件加入專案。

然後動手編寫程式及測試程式,測試程式除了放在測試目錄下,通常我們會在命名時,以Test做為名稱的結尾。JUnit4開始加入了Annotation的方式定義測試項目,只要在要測試的項目前加上@Test 就是一個簡易的測試項目了。

更淺的測試覆蓋度說明 Maven+Cobertura

測試覆蓋度其實是單元測試的副產品,產出必需依賴測試的過程。簡易理解,就是測試過程中,分析所有測試項目爬過的主程式,然後計算出爬過跟沒爬過的統計資料。測試項目的數量跟覆蓋度是兩個相輔相成的質量分析指標。而Cobertura便是協助完成覆蓋度計算的工具。

程式開發過程中我們不需要Cobertura,而且他非常傷執行效能,所以我們只要設定Cobertura在Jenkins中執行就好了。參考Cobertura Plugin中的建議方式設定Maven的 pom.xml 加入下以片段。

Source Copy : https://wiki.jenkins-ci.org/display/JENKINS/Cobertura+Plugin

其餘的,讓 Jenkins 來就好了

建立一個新的Free-Style專案,範例中的 SCM來源及 Maven Goal參考以下設定

[*]Git: https://github.com/abola/co.gibar.example.git
[*]Maven Goal: clean compile cobertura:cobertura

建立自動輪詢,讓Git有更新時,Jenkins自動啟動建置,每十分鐘輪詢一次,設定正確下方會出現下次預計啟動時間

設定建置後,產生Unit Test 的報告,Maven的UnitTest報告會放在 target/surefire-reports/*.xml

設定建置後,產生Cobertura覆蓋度報告,而cobertura的結果會存放在coverage.xml中,至於存放的位置,Maven通常會放在 **/target/site/cobertura/coverage.xml

最後,將結果整合發送至郵件中,如果你不知道怎麼設定,請參考 [ 使用 Jenkins 產生自動化郵件通知報表 - Email-ext Plugin ] ,照著該篇內容操作,我們這兒只要將『可編式電子郵件通知』的項目新增出來,設定皆用設定值即可。

OK! 文章之初的內容就是這樣子做出來的囉。不過別忘了,圖表都要有兩次以上的建置記錄,才有辦法繪製喔!而我們專案的頁面現在會長的像這樣。其中Coverage Report內的內容就是Cobertura產出非常詳細的覆蓋度報告。

這是分享的第一篇Jenkins 應用,也是Jenkins最常見的應用類型,裡面含蓋的工作,從更新輪詢、自動化測試、覆蓋度、到最後製作報表發送,都是無人化自動作業。或許真的有幫公司省下了一些工時成本,但更重要的,這些環節都可以讓專案的問題提早攤開面對。

Jenkins目前為止,都還挺美好的,但他真的沒問題嗎?有的,有個有趣的問題,作業逾時。有趣的是Jenkins本身沒逾時設定,所以他至死不渝。

下一篇:骨牌效應 - 佔著茅坑不拉屎,排隊的人急到死

本篇同步發表於:http://www.gibar.co/2014/10/jenkins-cobertura-plugin.html


上一篇
10. 災復演練 - Jenkins 備份與還原
下一篇
12. 骨牌效應 - 佔著茅坑不拉屎,排隊的人急到死
系列文
探索 Jenkins-CI 從認識到應用16
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言