首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SonarQube没有显示Gradle多项目中JUnit测试的测试Jacoco覆盖率

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

Stack Overflow用户
提问于 2020-01-09 23:05:16
回答 2查看 3K关注 0票数 0

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

测试覆盖率在SonarQube中显示为0%,即使存在一些第一次测试。

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

代码语言:javascript
运行
复制
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构建中,我们设置了以下参数:

代码语言:javascript
运行
复制
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

生成的结果显示错误: 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

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

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2020-06-17 01:20:31

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

代码语言:javascript
运行
复制
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命令

代码语言:javascript
运行
复制
gradlew sonarqube jacocoTestReport
票数 1
EN

Stack Overflow用户

发布于 2020-01-16 22:34:21

我设法创建了聚合的coverage.xml文件,将顶级build.gradle更改为:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
cd server && ./gradlew build generateMergedReport

其中的SonarQube属性更改为:

代码语言:javascript
运行
复制
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文件。

代码语言:javascript
运行
复制
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

有没有人知道少了什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59666819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档