26

我有一个如下所示的项目结构。我想使用 Gradle 中的TestReport功能将所有测试结果聚合到一个目录中。然后我可以通过一个 index.html 文件访问所有子项目的所有测试结果。我怎样才能做到这一点?

.
|--ProjectA
  |--src/test/...
  |--build
    |--reports
      |--tests
        |--index.html (testresults)
        |--..
        |--..
|--ProjectB
    |--src/test/...
      |--build
        |--reports
          |--tests
            |--index.html (testresults)
            |--..
            |--..
4

5 回答 5

34

来自示例 4。为Gradle 用户指南中的子项目创建单元测试报告

subprojects {
    apply plugin: 'java'

    // Disable the test report for the individual test task
    test {
        reports.html.enabled = false
    }
}

task testReport(type: TestReport) {
    destinationDir = file("$buildDir/reports/allTests")
    // Include the results from the `test` task in all subprojects
    reportOn subprojects*.test
}

samples/testing/testReport完整的 Gradle 发行版中提供了完整的工作示例。

于 2013-06-04T15:29:25.770 回答
4

除了上面@peter-niederwiesersubprojects建议的块和testReport任务之外,我还会在下面的构建中添加另一行:

tasks('test').finalizedBy(testReport)

这样,如果您运行gradle test(甚至gradle build),该testReport任务将在子项目测试完成后运行。请注意,您必须使用tasks('test')而不是仅仅test.finalizedBy(...)因为该test任务在根项目中不存在。

于 2019-09-11T22:52:44.300 回答
1

如果使用 kotlin Gradle DSL

val testReport = tasks.register<TestReport>("testReport") {
    destinationDir = file("$buildDir/reports/tests/test")
    reportOn(subprojects.map { it.tasks.findByPath("test") })

subprojects {
    tasks.withType<Test> {
        useJUnitPlatform()
        finalizedBy(testReport)
        ignoreFailures = true
        testLogging {
            events("passed", "skipped", "failed")
        }
    }
}

并执行gradle testReport. 来源如何为所有 Gradle 子项目生成汇总测试报告

于 2020-11-24T15:17:05.313 回答
0

对于 'connectedAndroidTest' 有一种由 google 发布的方法。(https://developer.android.com/studio/test/command-line.html#RunTestsDevice多模块报告部分))

  1. 将“android-reporting”插件添加到您的项目 build.gradle。

    apply plugin: 'android-reporting'

  2. 使用附加的 'mergeAndroidReports' 参数执行 android 测试。它将项目模块的所有测试结果合并为一份报告。

    ./gradlew connectedAndroidTest mergeAndroidReports

于 2017-04-12T21:15:20.613 回答
0

subprojects仅供参考,我已经在我的根项目build.gradle文件中使用以下配置解决了这个问题。这样就不需要额外的任务。

注意:这会将每个模块的输出放在自己的reports/<module_name>文件夹中,因此子项目构建不会覆盖彼此的结果。

subprojects {
 // Combine all build results
  java {
    reporting.baseDir = "${rootProject.buildDir.path}/reports/${project.name}"
  }
}

对于默认 Gradle 项目,这将导致文件夹结构类似于

build/reports/module_a/tests/test/index.html
build/reports/module_b/tests/test/index.html
build/reports/module_c/tests/test/index.html
于 2020-03-08T19:58:37.187 回答