2011-10-12 146 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

相关问题