How to aggregate a test report to build a mutli project with various plugins?

How can I iterate over the test results of each project and collect it in one report?

Project setup example:

Root Project
    |
    |- Java Project
    |- test task
    |
    |- Android Library Project (has Build Types)
    |- testDebug task
    |- testRelease task
    |
    |- Android application Project (has Product Flavors and Build Types)
    |- testFreeDebug task
    |- testFreeRelease task
    |- testPaidDebug task
    |- testPaidRelease task

What I still have:

This summarizes all test results for all projects:

task aggregateResults(type: Copy) {
    outputs.upToDateWhen { false }
    subprojects { project ->
        from { project*.testResultsDir }
    }
    into { file("$rootDir/$buildDir/results") }
}

task testReport(type: TestReport) {
    outputs.upToDateWhen { false }
    destinationDir = file("$rootDir/$buildDir/reports/allTests")
    subprojects { project ->
        reportOn project.tasks.withType(Test)*.binResultsDir
    }
}

Literature:

For Java only:

task testReport(type: TestReport) {
    destinationDir = file("$buildDir/reports/allTests")
    reportOn subprojects*.test
}

Source: stack overflow

Android only:

subprojects.each { subproject -> evaluationDependsOn(subproject.name) }
def testTasks = subprojects.collect { it.tasks.withType(Test) }.flatten()
task aggregateResults(type: Copy) {
    from { testTasks*.testResultsDir }
    into { file("$buildDir/results") }
}

Source: https://android.googlesource.com/platform/tools/build/+/nougat-release/build.gradle#79

+4
source share

Source: https://habr.com/ru/post/1667931/


All Articles