如何汇总多个项目的JUnit测试结果

62次阅读
没有评论

问题描述

在Jenkins中使用多个项目来运行应用程序的各种测试套件。有一个“父”项目,由Git提交触发。该项目构建我们的“子”项目。每个子项目运行一系列定义的测试。每个项目都使用JUnit来将测试结果输出到构建页面上。为了全面了解我们整个项目的提交情况,需要访问每个“子”项目的构建页面才能查看结果。用户希望能够将由“父”项目触发的所有“子”项目的JUnit报告汇总到一个地方,以便我们可以一起查看所有的测试结果。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

Jenkins的JUnit插件有一个内置的发布器,用于汇总测试结果,名为“Aggregate Downstream Test Results”。您需要确保“父”和“子”作业之间通过下游/上游关系进行链接。通常,这是通过在父构建中存档一个构件,并使用“Archive Artifact”发布器和“Copy Artifact”构建步骤将其复制到子构建中来完成的。
以下是实现的步骤:
1. 在“父”项目的构建中,使用“Archive Artifact”发布器将JUnit报告存档为构建的一个构件。
2. 在“子”项目的构建中,使用“Copy Artifact”构建步骤将存档的JUnit报告从“父”项目复制到“子”项目。
3. 在“子”项目的构建中,使用“Aggregate Downstream Test Results”发布器来汇总所有“子”项目的JUnit报告。
下面是一个示例的Jenkinsfile配置:

pipeline {
    agent any
    stages {
        stage('Build Parent') {
            steps {
                // 构建父项目
                // ...
                // 存档JUnit报告
                archiveArtifacts artifacts: 'target/surefire-reports/*.xml', fingerprint: true
            }
        }
        stage('Build Child') {
            steps {
                // 构建子项目
                // ...
                // 复制父项目的JUnit报告
                copyArtifacts projectName: 'Parent', filter: 'target/surefire-reports/*.xml'
                // 汇总JUnit报告
                junit 'target/surefire-reports/*.xml'
            }
        }
    }
}

在上面的示例中,我们使用Jenkins的Pipeline插件来定义一个流水线,其中包含两个阶段:“Build Parent”和“Build Child”。在“Build Parent”阶段中,我们构建了父项目,并使用“archiveArtifacts”步骤将JUnit报告存档为构建的一个构件。在“Build Child”阶段中,我们构建了子项目,并使用“copyArtifacts”步骤将父项目的JUnit报告复制到子项目。然后,我们使用“junit”步骤来汇总所有子项目的JUnit报告。
请注意,上述示例是使用Jenkins的Pipeline插件来实现的。如果您使用的是其他版本的Jenkins或不使用Pipeline插件,请根据您的实际情况进行相应的配置。

方案2

如果您使用Gradle构建工具,可以尝试使用多模块项目来汇总JUnit测试结果。这样做还可以获得代码覆盖率报告。
如果您能够使用Gradle构建工具,可以尝试使用多模块项目来汇总JUnit测试结果。这样做还可以获得代码覆盖率报告。您可以参考以下资源:
Multi-module projects
Multi-project code coverage using Gradle and JaCoCo
请注意,这种方法需要您对Gradle构建工具有一定的了解,并且需要根据您的项目结构进行相应的配置。

正文完