当前位置: 首页 > 知识库问答 >
问题:

SonarQube没有显示Gradle多项目中JUnit测试的测试Jacoco覆盖率

任繁
2023-03-14

我想展示用Gradle 6.0构建的多项目Spring boot应用程序的测试覆盖范围。我们目前使用JUnit5。

SonarQube中的测试覆盖率为0%,尽管存在一些首次测试。

顶层项目(https://github.com/OpenReqEU/eclipse-plugin-vogella/blob/master/server/build.gradle)中的build.gradle文件有以下输入:

plugins {
    id "org.sonarqube" version "2.7"
    id 'jacoco'
}

repositories {
    jcenter()
}

subprojects {
    apply plugin: 'jacoco'
    apply plugin: 'java'
    apply plugin: 'eclipse'

    repositories {
        jcenter()
        maven { url 'https://repo.spring.io/snapshot' }
        maven { url 'https://repo.spring.io/milestone' }
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
            maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }
    }

    jacocoTestReport {
        reports {
            xml.enabled true
            xml.destination file("${buildDir}/coverage-reports/coverage.xml")
            //html.destination file("${buildDir}/coverage-reports")
        }
    }

    ext {
        springBootVersion = '2.1.1.RELEASE'
    }

    sourceCompatibility = 1.8

}


wrapper {
    gradleVersion = '6.0'
}

在Jenkins构建中,我们设置了以下参数:

sonar.projectKey=eclipse-plugin-vogella
sonar.sources=server/com.vogella.prioritizer.server/src/main,server/com.vogella.prioritizer.server.bugzilla/src/main,server/com.vogella.prioritizer.server.issue.api/src/main
sonar.java.binaries=com.vogella.prioritizer.server/build/classes/java/main,com.vogella.prioritizer.server.bugzilla/build/classes/java/main,com.vogella.prioritizer.server.issue.api/build/classes/java/main
sonar.tests=server/com.vogella.prioritizer.server/src/test,server/com.vogella.prioritizer.server.bugzilla/src/test
sonar.coverage.jacoco.xmlReportsPath=server/com.vogella.prioritizer.server.bugzilla/build/jacoco/test.exec,server/com.vogella.prioritizer.server/build/jacoco/test.exec,server/com.vogella.prioritizer.server.issue.api/build/jacoco/test.exec

生成结果显示错误:信息:解析[/home/jenkins/workspace/issue-priorizer/coverage-reports/coverages.xml]错误:未找到报告路径或报告路径不是目录:/home/jenkins/workspace/ission-prioriizer/coveration-reports/coverge.xml

我看到每个项目都有一个生成的${buildDir}/coverage-report/coverage.xml文件,但根文件是空的,这是意料之中的,因为我没有配置与此相关的任何内容。

在某个时候,我添加了一个复制任务,将一个项目中的一个生成的xml文件复制到根文件夹中,但是构建作业抱怨这些类不匹配。

有人知道如何解决这个问题吗?我假设我必须添加一个配置来添加一个根coverage.xml文件,它是单个文件的集合,但我还没有找到解决方案。

我还尝试将jacoco应用于根项目,但这也失败了,因为根项目不是Java项目。

共有2个答案

颜光临
2023-03-14

我设法创建了聚合覆盖率。通过更改顶级构建来创建xml文件。gradle to:

plugins {
//    id "org.sonarqube" version "2.7"
    id 'jacoco'
}

repositories {
    jcenter()
}


subprojects {

    println name;
    apply plugin: 'jacoco'
    apply plugin: 'java'
    apply plugin: 'eclipse'

    repositories {
        jcenter()
        maven { url 'https://repo.spring.io/snapshot' }
        maven { url 'https://repo.spring.io/milestone' }
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
        maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }
    }

    jacocoTestReport {   
        reports {
            xml.enabled true
        }
    }

    ext {
        springBootVersion = '2.1.1.RELEASE'
    }

    sourceCompatibility = 1.8
}

// run the build with ./gradlew clean build generateMergedReport
task generateMergedReport(type: JacocoReport) {
    dependsOn = subprojects.test 

    additionalSourceDirs.setFrom files(subprojects.sourceSets.main.allSource.srcDirs)
    sourceDirectories.setFrom files(subprojects.sourceSets.main.allSource.srcDirs)
    classDirectories.setFrom files(subprojects.sourceSets.main.output)

    executionData.setFrom project.fileTree(dir: '.', include: '**/build/jacoco/test.exec')
    println executionData;

    reports {
        xml.enabled true
        xml.destination file("../coverage-reports/coverage.xml")
    }
}

wrapper {
    gradleVersion = '6.0'
}

并更改了Jenkins以构建generateMergedReport:

cd server && ./gradlew build generateMergedReport

SonarQube属性更改为:

sonar.projectKey=eclipse-plugin-vogella
sonar.sources=server/com.vogella.prioritizer.server/src/main,server/com.vogella.prioritizer.server.bugzilla/src/main,server/com.vogella.prioritizer.server.issue.api/src/main
sonar.java.binaries=com.vogella.prioritizer.server/build/classes/java/main,com.vogella.prioritizer.server.bugzilla/build/classes/java/main,com.vogella.prioritizer.server.issue.api/build/classes/java/main

不幸的是,SonarQube仍然没有找到coverage.xml文件。

INFO: parsing [/home/jenkins/workspace/issue-prioritizer/coverage-reports/coverage.xml]
ERROR: Reports path not found or is not a directory: /home/jenkins/workspace/issue-prioritizer/coverage-reports/coverage.xml

有人知道缺少什么吗?

卢锋
2023-03-14

需要生成xml格式的报告。将sonar属性添加到xml路径,如下所示。

jacocoTestReport {
    reports {
        xml.enabled true
    }
}

sonarqube {
        properties {
            property "sonar.java.source", "1.8"
            property "sonar.java.coveragePlugin", "jacoco"
            property "sonar.jacoco.reportPaths", "build/reports/jacoco/test/jacocoTestReport.xml"
        }
}

使用jacocoTestReport运行gradle命令

gradlew sonarqube jacocoTestReport
 类似资料:
  • 我正在运行我的selenium项目模块,它不是主项目的一部分,我用Jacoco maven插件和surefire插件运行selenium测试,Jacoco只给出了selenium项目的代码覆盖(exec文件),而不是整个项目...我需要如何配置我的Jacoco和Surefire以获得外部/整个项目覆盖??

  • 问题内容: 从不同的代码库执行业务测试时,我必须获得应用程序的代码覆盖率。 我使用:Maven作为我的构建Jbehave作为我的测试框架。测试是用Java编写的。 我的应用程序是部署在tomcat上的一组war文件。 应用程序代码库与测试代码库是分开的。 为了获得覆盖范围,我遵循以下步骤。 1使用maven编译测试代码。 2将应用程序类从其构建位置($ {app.code.dir} / targe

  • 我使用JaCoCo进行代码覆盖。单元测试报告是用junit创建的,它们被正确地导入,因此单元测试信息被正确地显示出来。问题是,我得到了错误消息:没有关于每个测试覆盖率的信息。代码覆盖率显示单元测试、集成测试和整体覆盖率的值为0%。我检查了sonar项目中所有需要的信息,如二进制、src、测试等属性。 我使用的是:<br>-SonarQube 4.5.1<br>-SonarRunner 2.4<br

  • 我尝试在我的应用程序模块中的代码的AndroidKotlin应用程序的声纳Qube中显示测试覆盖范围。我可以生成雅各的覆盖结果并显示声纳Qube分度仪,但问题是测试覆盖范围未显示在声纳Qube中: https://imgur.com/a/xOjxLl1 在我的项目的build.gradle中,我有: 在我的身体里。我的应用程序模块的gradle 我生成我的Jacoco报告: 并使用:生成我的son

  • SonarQube不再显示我用jacoco分析的项目的测试覆盖率。似乎SonarQube有了更新(我发现新规则的日期是5月19日)。我还假设,从那时起,不再评估使用jacoco maven插件收集的测试覆盖率。我见过类似问题的老问题,但那是4年前的事了:JaCoCo SonarQube不兼容版本1007 我将POM更新到最新的插件版本0.8.4,但无济于事。有什么想法吗?我需要在哪里更改一些东西,

  • 我有一个配置了jacoco插件的Gradle项目来报告测试代码覆盖率。我的单元测试是在Spock框架中编写的。 尽管Jacoco插件生成HTML报告,但它报告所有类的代码覆盖率为0%。 我在谷歌上搜索了很多,没找到我缺少的东西。有人和Gradle Jacoco合作过Spock代码吗?