linux - SONAR - 使用 Cobertura 测量代码覆盖率

标签 linux continuous-integration code-coverage sonarqube

我正在使用 Sonar 来衡量代码质量。我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤。

我按照 http://cobertura.sourceforge.net/anttaskreference.html 中的步骤操作并能够生成 xml 文件。如何将这些 xml 文件导入 SONAR?

有没有更简单的方法在 SONAR 中使用 Cobertura?

我在与我的 SONAR 服务器不同的服务器上运行代码覆盖率 (Cobertura)。两台服务器都在 LINUX 下运行。

感谢您的帮助!

最佳答案

您将 Sonar 任务配置为上传由构建逻辑的其他部分生成的单元测试和 Cobertura 报告。

这与 Maven 形成对比,后者具有 Sonar 能够利用的标准构建生命周期。

单元测试和代码覆盖率

以下逻辑使用 cobertura 检测类运行单元测试。最后由 cobertura 生成 XML 覆盖率报告:

<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>

调用 Sonar

我通常使用一个非常简单的 Sonar 目标:

<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 在同一台服务器上运行。在这种情况下,必须提供远程 Sonar URL 和 JDBC 凭据。

关于linux - SONAR - 使用 Cobertura 测量代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747587/

相关文章:

java - 一个正则表达式,用于捕获两个略有不同的模式

python - 有没有一种简单的方法来获取 python 私有(private)堆大小?

c# - 如何从 Jenkins 的多个测试项目中获取 dotCover 覆盖率报告

c - 在运行时转储 gcov 数据

javascript - Selenium 测试的 JS 代码覆盖率

Linux 可以使用它不应该(?)看到的内存(RAM)

linux - 如何编写全屏 Linux 控制台应用程序/脚本?

python - 与 python 2.7/flask/mongoDB/git 的持续集成

java - 从 Jenkins 构建作业将 Jar 部署到远程服务器

sql - 生成用于数据库测试的 SQL 语句