2011-10-12 55 views
9

我使用聲納來測量代碼質量。我不知道的一件事是使用Cobertura測量代碼覆蓋率的步驟。SONAR - 使用Cobertura測量代碼覆蓋率

我遵循http://cobertura.sourceforge.net/anttaskreference.html的步驟,並能夠生成XML文件。我如何將這些XML文件導入SONAR?

在SONAR中使用Cobertura有更簡單的方法嗎?

我在不同於我的SONAR服務器的服務器上運行代碼覆蓋(Cobertura)。兩臺服務器都在LINUX下運行。

感謝您的幫助!

+0

關於此主題的更新:可以在我們的sonar-example存儲庫中找到示例=> https://github.com/SonarSource/sonar-examples/tree/master/projects/code-coverage –

回答

11

您配置聲納任務上傳通過您的構建邏輯的其它部分所產生的單元測試和的Cobertura報告。

這與Maven具有Sonar能夠利用的標準生命週期形成對比。

單元測試和代碼覆蓋

下面的邏輯運行用Cobertura單元測試儀表類。一個XML覆蓋報告通過的Cobertura在年底產生:

<target name="instrument-classes" depends="compile-tests"> 
    <taskdef resource="tasks.properties" classpathref="test.path"/> 
    <cobertura-instrument todir="${instrumented.classes.dir}" datafile="${build.dir}/cobertura.ser"> 
     <fileset dir="${classes.dir}"/> 
    </cobertura-instrument> 
</target> 

<target name="junit" depends="instrument-classes"> 
    <junit printsummary="yes" haltonfailure="yes"> 
     <classpath> 
      <path refid="test.path"/> 
      <pathelement path="${instrumented.classes.dir}"/> 
      <pathelement path="${test.classes.dir}"/> 
     </classpath> 

     <formatter type="xml"/> 

     <batchtest fork="yes" todir="${test.reports.dir}"> 
      <fileset dir="${test.src.dir}"> 
       <include name="**/*Test*.java"/> 
       <exclude name="**/AllTests.java"/> 
      </fileset> 
     </batchtest> 
    </junit> 
</target> 

<target name="test" depends="junit"> 
    <cobertura-report format="xml" datafile="${build.dir}/cobertura.ser" destdir="${cobertura.reports.dir}"/> 
</target> 

調用聲納

我通常使用一個非常簡單的聲納目標:

<target name="sonar" depends="test"> 
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml" classpathref="sonar.path"/> 

    <sonar:sonar key="${sonar.project.key}" version="${sonar.project.version}" xmlns:sonar="antlib:org.sonar.ant"/> 
</target> 

,並使用屬性文件來控制各個方面Sonar的行爲:

sonar.project.key=org.demo:demo 
sonar.project.version=1.0-SNAPSHOT 
sonar.projectName=Demo project 

sonar.host.url=http://myserver:9000 
sonar.jdbc.url=jdbc:mysql://myserver:3306/sonar?useUnicode=true&characterEncoding=utf8 
sonar.jdbc.driverClassName=com.mysql.jdbc.Driver 
sonar.jdbc.username=sonar 
sonar.jdbc.password=sonar 

sonar.sources=${src.dir} 
sonar.tests=${test.src.dir} 
sonar.binaries=${classes.dir} 

sonar.dynamicAnalysis=reuseReports 
sonar.surefire.reportsPath=${test.reports.dir} 
sonar.java.coveragePlugin=cobertura 
sonar.cobertura.reportsPath=${cobertura.reports.dir}/coverage.xml 

演示Sonar如何配置爲拿起junit創建的單元測試報告和cobertura生成的代碼覆蓋率報告。

構建不必在同一服務器聲納上運行。在這種情況下,必須提供遠程Sonar URL和JDBC憑證。

+0

我試圖按照你的指示;但是,我仍然遇到和以前一樣的問題,我無法看到SONAR內部的覆蓋率統計信息。生成的xml和ser文件與我以前的文件類似。 你能幫助我獲得SONAR作品中的統計數據嗎? – lwijono

+0

Sonar任務輸出是否顯示您正在加載正確的覆蓋率文件? –

+0

如何檢查? – lwijono

2

你必須將這些屬性添加到聲納的pom.xml

<properties> 
    <sonar.dynamicAnalysis>false</sonar.dynamicAnalysis> 
    <sonar.phase>generate-sources</sonar.phase> 
    <sonar.surefire.reportsPath>target/reports/test/</sonar.surefire.reportsPath> 
    <sonar.cobertura.reportPath>../project/target/reports/coverage/coverage.xml</sonar.cobertura.reportPath> 
</properties> 

(有適合您的環境路徑)

並運行:

mvn sonar:sonar 

檢查user list瞭解更多詳情。

+0

如果我的項目沒有使用Maven?我還需要運行它嗎?從Cobertura網站上看,我們也可以使用ANT。我錯了嗎? 現在,我對聲納 - 瑪芬 - 科伯圖拉之間的關係感到困惑。比方說,我通過調用將運行構建腳本的ant來從哈德森調用構建。我的構建腳本將執行構建並更新SONAR DB。此外,最初,我想我只需要在構建腳本中添加一些命令來運行Coberture。現在我不確定。我應該如何在我的情況下用maven調用Coberture?其他解決方案也歡迎?感謝您的幫助。 – lwijono

+0

直到最近,Sonar才與Maven耦合。自2.6(2011年3月)以來,「Sonar」也支持ANT。可以添加上述螞蟻腳本所示的屬性(這裏)(http://docs.codehaus.org/display/SONAR/Analyse+with+Ant+Task+1.0),例如:'<屬性鍵=」 sonar.dynamicAnalysis「value =」false「/>'。我沒有運行聲納+ Cobertura +螞蟻亞軍,但它不應該有任何不同。或者,你可以檢查出一個聲納獨立式(無ANT,Maven的,等等)亞軍(http://docs.codehaus.org/display/SONAR/Analyse+with+a+simple+Java+Runner) – tolitius

1

如果您使用的是Maven,那麼您沒有什麼特別的東西可以在您的POM文件中指定。只需運行「mvn clean sonar:sonar」,Sonar就會自動編譯你的代碼,用Cobertura(這是Sonar默認的覆蓋引擎)運行你的測試,並將所有結果推送到數據庫中。

如果您使用Ant [1]或簡單的java runner [2]而不是Maven,則相同。

我確實堅持這樣一個事實,即您以前不需要手動運行Cobertura(以Ant任務爲例)以運行Sonar。

[1] http://docs.codehaus.org/display/SONAR/Analyzing+with+Sonar+Ant+Task

[2] http://docs.codehaus.org/display/SONAR/Analyse+with+a+simple+Java+Runner

和Fabrice, SonarSource

相關問題