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

Gradle:如何使用jacoco为集成测试生成覆盖报告

党博超
2023-03-14

我是格雷德尔的新手。我正在使用下面的代码。但是它会生成单元测试用例的覆盖率。但它不是为集成测试用例生成的。我在src/test/java包中有测试类。

test {
    dependsOn jettyRunWar
    ignoreFailures true
    finalizedBy jettyStop
}

apply plugin: 'jacoco'

jacocoTestReport {
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)
}

共有1个答案

松英喆
2023-03-14

使用Gradle 5.4.1(现在是5.5.1),我能够在任何测试任务后获得报告,目前我有testintegrationtest任务。

Edit3:修正了只执行部分测试任务时的潜在bug

  • 不要在dolast/doFirst块中配置ExecutionData,这是我的错误。欲了解更多信息,请查看此gradle github Ticket
  • 添加了更谨慎的替代方法(同样不在dolast/doFirst块中)executiondata{tasks.withtype(Test).findall{it.jacoco.destinationfile.exists()}*.jacoco.destinationfile}

Edit2:解决方案是一样的,我只是调整了一下

    null
jacocoTestReport {
    // The JaCoCo plugin adds a JacocoTaskExtension extension to all tasks of type Test.
    // Use task state to include or not task execution data
    // https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html
    // This declaration will be used as a closure, notice there no wrapping parenthesis
    executionData tasks.withType(Test).findAll { it.state.executed }

    // If the above instruction really don't work, there maybe some things that intervene in the process, in this case, you may be a bit more lucky with this instruction
    // executionData { tasks.withType(Test).findAll { it.jacoco.destinationFile.exists() }*.jacoco.destinationFile }

    reports {
        xml.enabled true
        xml.destination(file("${jacoco.reportsDir}/all-tests/jacocoAllTestReport.xml"))
        html.enabled true
        html.destination(file("${jacoco.reportsDir}/all-tests/html"))
    }
}

同样的技巧也可以应用于Sonarqube任务:

sonarqube {
    group = "verification"
    properties {
        // https://jira.sonarsource.com/browse/MMF-1651
        property "sonar.coverage.jacoco.xmlReportPaths", jacocoTestReport.reports.xml.destination
        properties["sonar.junit.reportPaths"] += integrationTest.reports.junitXml.destination
        properties["sonar.tests"] += sourceSets.integrationTest.allSource.srcDirs
        // ... other properties
    }
}

更老但很管用的答案。同样,使用上述知识(Test的任务由JacoCotaskExtension扩展),可以用Test.jacoco.destinationFileIntegrationTest.jacoco.destinationFile替换ExecutionData的手动文件配置。

// Without it, the only data is the binary data, 
// but I need the XML and HTML report after any test task
tasks.withType(Test) {
    finalizedBy jacocoTestReport
}

// Configure the report to look for executionData generated during the test and integrationTest task
jacocoTestReport {
    executionData(file("${project.buildDir}/jacoco/test.exec"),
                  file("${project.buildDir}/jacoco/integrationTest.exec"))
    reports {
        // for sonarqube
        xml.enabled true
        xml.destination(file("${project.buildDir}/reports/jacoco/all-tests/jacocoAllTestReport.xml"))
        // for devs
        html.enabled true
        html.destination file("${project.buildDir}/reports/jacoco/all-tests/html")
    }
}


sonarqube {
    group = "verification"
    properties {
        // https://jira.sonarsource.com/browse/MMF-1651
        property "sonar.coverage.jacoco.xmlReportPaths", ${project.buildDir}/test-results/integrationTest"
        properties["sonar.junit.reportPaths"] += "${project.buildDir}/test-results/integrationTest"
        properties["sonar.tests"] += sourceSets.integrationTest.allSource.srcDirs
        // ... other properties
    }
}

project.tasks["sonarqube"].dependsOn "jacocoTestReport"
 类似资料:
  • 我正在为一个项目编写集成测试,在这个项目中,我正在进行HTTP调用,并测试它们是否成功。 因为我没有导入任何模块,也没有直接调用函数coverage.py报告为0%。 我想知道如何为此类集成HTTP请求测试生成覆盖率报告?

  • 使用jacoco代理并获取测试覆盖率报告有大量答案。大多数答案都是一半,我有点困惑。 以下是我想做的:1。我的Java应用程序正在某个远程服务器上运行。说IP-192.168.17.7 我使用以下命令运行测试:mvn-Denv=stage-Dmaven。测验失败ignore=true-DsuiteFile=src/test/java/Smoke。xml测试 现在我如何通过使用Jacoco代理获得J

  • 我已经看了一段时间关于stackoverflow的不同文章和答案,但我还没有找到适合我的情况的有效解决方案。我对jacoco、maven和sonar如何一起创建报告的理解肯定有问题,所以我要寻求帮助。 我有一个多模块maven项目,其结构如下(稍微简化了一下): 请允许我扩展一下。父模块只是一个带有整个依赖项及其版本的pom。这个pom被用作level1的每一个其他模块的父模块(直接位于根下面)。

  • 我在IntelliJ IDEA上设置了一个Java应用程序。我有几个测试,我需要为每个测试单独生成覆盖报告。 IntelliJ IDEA 覆盖率运行器一次运行所有测试,并生成显示整体覆盖率的单个报告。如何在分级脚本中使用智能IDEA IDEA覆盖运行器或Jaco插件来生成单独的测试报告?

  • 我一直在尝试在JBoss服务器中实现JaCoCo离线代码覆盖,使用仪表化的EAR进行部署和jacococagent.jar,以便跟踪针对所述JBoss运行的外部集成测试的代码覆盖。 我一直在关注这样的指南: http://www.eclemma.org/jacoco/trunk/doc/offline.html http://automationrhapsody.com/code-coverage

  • 在我的gradle构建脚本中,我有一个部分说在运行任务时生成测试报告:JacocoTestReport 当我运行任务时,它给我一个错误:无法读取执行数据文件…\build\jamoco\test.exec我如何修复这个错误。当我在完整的项目上进行gradle构建时,我看到测试报告正在生成。

  • 假设主模块A和子模块是B和C。在我的gradle文件中,我只在声纳和雅各科的配置下面添加了。 当我运行gradle任务时:构建成功,但显示在下面的信息 信息-JaCoCoItSensor:未找到JaCoCo IT报告:/../../../A/build/JaCoCo/JaCoCo-IT.exec 集成测试工作正常。但仅显示主模块的代码覆盖率。我想要的是,当我运行集成测试时,子模块代码也包含在代码覆