2009-09-14 257 views
14

我正在將幾個項目從一個ant構建遷移到一個maven項目。構建服務器現在仍將是Hudson。Hudson中的Java代碼覆蓋範圍

由於tests run and recorded twice problem由於cobertura,我一直在哈德森記錄代碼覆蓋率問題。

該項目是多模塊,它將是很好的,雖然不是必需的,有一個彙總輸出的代碼覆蓋率數據。

總而言之,解決我在尋找絕:

所有模塊
  • 進行自動測試,並記錄結果一次;
  • 在Hudson中顯示個人模塊代碼覆蓋範圍;
  • 易於配置一次爲整個項目,不在每個模塊中。

解決方案可以基於Cobertura或Emma或任何其他Java代碼覆蓋工具。


更新:運行艾瑪測試還是複製的結果,並沒有merge能力,所以它不是一個真正可用的多模塊構建。

回答

1

羅伯特,

我有這個問題,以及發現哈德森沒有雙報告,如果你設置的項目作爲自由泳項目,而不是一個Maven2的項目。你確實失去了一個maven2項目的好處,但對我們來說,這是一個我們必須做的交易。

傑夫

+0

感謝您的回答。很高興知道,我將此作爲備選方案。 – 2009-09-15 06:39:03

+0

當然。另外,我並不是100%確定的,但我相信會發生什麼情況是,在未安裝代碼之前,已插裝的代碼將在類路徑中結束,然後當單元測試由Surefire插件運行時,它將運行已插裝的代碼,結果被計算兩次。如果你有其他插件運行單元測試,你會看到測試次數再次增加。您可以使用mvn -X運行您的構建以獲取應該提供類路徑的調試信息。 – 2009-09-15 12:35:23

1

我們使用自由式項目,沒有這個問題,從而表明,這可能是你的問題的根源。

爲了提供合併功能,我們創建了自己的工件存儲庫(我們不使用Maven)。在每次構建結束時,我們將cobertura.ser文件複製到網絡共享中,並在過程中對其進行重命名。我們有一個整合的視圖工作,將所有cobertura文件和源代碼文件(複製到網絡共享的另一個構建工件)複製到本地構建目錄中,並生成Cobertura報告。

Hudson中缺乏標準的工件存儲庫有點令人沮喪,但它有意義,使作者通常使用Maven來滿足這些需求。我們的構建過程運行在多個服務器上,所以我們不能只將相對路徑用於其他工作目錄。

請注意,我們對其他度量做同樣的事情:測試結果,JavaNCSS等。並使用正確的工具或一些自定義代碼加入。

我們對傳統構建工件使用相同的存儲庫:DLL,JAR,安裝腳本。

1

你考慮過Atlassian's Clover嗎?

maven-clover2-plugin有一個新的目標:clover2:setup它將簡單地測試你的測試而不會分叉生命週期或運行兩次測試。

你會明確目標在哈德森這樣運行:

mvn clover2:setup verify clover2:aggregate clover2:clover 

的Maven的clover2-插件是完全免費試用30天。

+0

感謝您的回覆。我確實考慮過三葉草,但是AFAIK並不適用於M2 Hudson的工作,只適用於自由泳。 – 2009-09-23 13:18:51

+0

嗨羅伯特, 我會研究一下。它絕對有效,如果你使用自由式的maven工作。 乾杯, 尼克 – npellow 2009-09-26 05:27:38

6

這有點冒失,但我使用的方法是使用modified version of the Maven cobertura plugin(這是available from their repo)。它提供了一個cobertura:generate-report目標,以便您可以分別在測試運行之前和之後插入cobertura:instrument和cobertura:generate-report到您的生命週期。這將爲您提供您想要的覆蓋率數據,而無需重複測試執行/記錄。

潛在的問題是,我遇到的所有非三葉草Maven覆蓋插件都是圍繞着與Maven生命週期中主要測試執行分開的覆蓋範圍運行測試的想法構建的。顯然,這導致兩組測試執行。如果您使用的是自由式項目,則只會記錄一組測試(因爲即使執行兩次測試,也只有一個測試輸出副本),但Maven項目類型實際上攔截了Maven mojo執行並且在測試執行時記錄測試輸出/結果,而不是像自由式項目一樣在構建結束時一次性記錄測試輸出/結果。這有很多優點,但它也有一個相當明顯的缺點,即一次執行兩次的測試會被計爲兩次測試。儘管我已經看到了針對非檢測和檢測代碼運行測試的強烈爭論,但我更願意僅針對檢測代碼運行一次測試 - 而不僅僅是因爲Maven/Hudson問題,但因爲當你需要45分鐘的測試時,運行它們兩次以產生相同的結果似乎相當愚蠢。

+0

看起來很有趣,謝謝。 – 2009-09-28 20:26:27

+0

鏈接無法正常工作,也許你可以更新它們?謝謝! – dhiller 2011-11-09 07:11:35

1

請參閱SD Java測試覆蓋率,瞭解具有良好GUI的極低開銷工具。我不確定我是否理解你的「運行兩次」問題,但是如果你使用SD工具兩次運行(相同的確定性)測試,你將得到相同的測試覆蓋率數據,例如它的冪等性。 如果您的測試不確定,您將得到兩個不同的測試運行,但這些工具很容易將幾次運行的結果合併爲一個總體摘要。它們也可以處理非常大的應用程序,並且很好地處理多線程應用程序(小時間碎片可以使理論上的答案稍微不準確,但實踐這個並不是問題)。

+0

感謝您的回答。是否有任何改變這個工具的Maven插件?我無法找到一個。 – 2009-10-03 12:18:51

+0

對不起,沒有maven插件。 – 2009-10-03 16:10:27