2013-08-26 65 views
11

我試圖使用Sonar和Jenkins獲得代碼覆蓋率。我看到Jenkins的Sonar插件成功執行JUnit測試用例併成功完成構建。但Sonar不會在項目中顯示代碼覆蓋率結果(總是顯示代碼覆蓋率爲0.0%)。但聲納確實顯示「單元測試成功」。Sonar在Jenkins Sonar插件成功構建後未顯示代碼覆蓋率

我正在與Jenkins和Sonar一起使用Maven。

我得到詹金斯日誌下面的消息在執行聲納插件:

 
Project coverage is set to 0% as no JaCoCo execution data has been dumped: .../sonar/target/jacoco.exec 

任何一個可以幫助我如何獲得任何聲納項目正確的代碼覆蓋率。

+0

您是否閱讀過http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project並嘗試相關項目樣本?如果是這樣,你能否提供更詳細的信息:日誌文件,在你的pom文件中配置SonarQube,你如何運行SonarQube:mvn clean install/mvn sonar:sonar? SonarQube等版本? –

+0

我閱讀http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project,並使用cobertura作爲我的代碼覆蓋率插件,然後我看到代碼覆蓋顯示小項目。當我在聲吶中檢查大型項目時,我只看到代碼覆蓋 - 這意味着它的empty.in日誌中可以找到Cobertura報告沒有在.../coverage.xml路徑中找到。這是什麼原因呢。顯示上面的消息之前,cobertura插件儀表進行得很順利。 – Venkat

+1

由於OutOfMemeryError而未生成coverage.xml:heapspace。由於我的項目是一個如此龐大的項目,當我將堆內存設置爲2GB並且cobertura插件內存爲1.5GB時,聲納會顯示代碼覆蓋率。 – Venkat

回答

2

我讀https://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Unit+Tests+for+Java+Project和使用的Cobertura作爲我的代碼覆蓋率插件,然後我看到代碼覆蓋顯示小項目。當我在聲吶中檢查一個大型項目時,我只看到代碼覆蓋率 - 這意味着它是空的。在日誌中,我可以發現在/.../coverage.xml路徑中找不到Cobertura報告。

由於OutOfMemeryError:heapspace而未產生coverage.xml。由於我的項目是一個如此龐大的項目,當我將堆內存設置爲2GB並且cobertura插件內存爲1.5GB時,聲納會顯示代碼覆蓋率。

0

而不是使用Jenkins聲納插件來運行聲納,試着通過執行聲納目標來做到這一點。通常情況下,設置一個額外的構建步驟並調整所有路徑,直到聲納找到所有相關文件爲止更容易。

在你的情況,我想它可以讀取junit/testng報告,但無法找到jacoco結果(jacoco.exec)。路徑聲納輸出(../sonar/target/jacoco.exec)是否正確?

+0

感謝您回覆我的問題。我曾嘗試執行mvn聲納:聲納。但是我沒有運氣,因爲沒有JaCoCo執行數據被拋棄​​,項目覆蓋率被設置爲0%:/user/mysys/.jenkins/jobs/../workspace/.../sonar/目標/ jacoco.exec。是的,它讀取單元測試結果,但代碼覆蓋失敗。 – Venkat

8

正因爲Sonar正確調用了Surefire(並且您收到「單元測試成功」消息)並不意味着JaCoCo檢測了您的代碼。

嘗試直接執行JaCoCo。你可能會發現,爲什麼JaCoCo直接失敗:

mvn jacoco:prepare-agent test jacoco:report

JaCoCo將放置jacoco.exec以及目標/ jacoco內的XML/HTML報告。或者它會失敗,並希望你會有一個更好的主意,爲什麼。

一個非常普遍的問題是,如果你已經改變了神火argLine在所有JaCoCo javaagent將無法運行,因爲jacoco:prepare-agent僅設置argLine財產在這種情況下,方便地忽略。您可以設置準備代理的propertyName財產別的東西(如jacocoArgLine)和包括在你argLine配置

<argLine>-Xmx1024m ${jacocoArgLine}</argLine>

0

根據這一blog post,你可能忘了設置sonar.binaries屬性在項目屬性

Don’t forget sonar.binaries, otherwise, you might get something like « Project coverage is set to 0% since there is no directories with classes. » in your logs.

[...] 
sonar.surefire.reportsPath=target/surefire-reports 
sonar.jacoco.reportPath=target/jacoco.exec 
sonar.binaries=target/classes 
[...] 
0

你的聲納插件無法找到Jacoco生成的報告文件。

在你的pom(父母或小孩)尋找標記jacoco/prepare-agent執行。將名稱和位置更改爲target/jacoco.exec,您便可以輕鬆前往!