如何将多Jenkins任务生成的Serenity BDD报告合并为单一报告?
实现Serenity BDD多Jenkins任务的合并报告方案
我之前帮团队解决过类似的问题,你提到的Jenkins Copy Artifact + Serenity Aggregate是完全可行的方案,同时还有几个更简便的替代思路,下面详细说明:
Jenkins Copy Artifact + Serenity Aggregate 具体实现步骤
这是最贴合你现有架构的方案,不需要调整太多现有任务配置:
- 第一步:配置各模块Jenkins任务的产物归档
在每个功能模块的Jenkins任务中,添加Post-build Actions -> Archive the artifacts,指定归档路径为target/site/serenity/**,确保Serenity的测试结果目录被保存为构建产物。 - 第二步:创建合并报告的主任务
- 添加Copy artifacts from another project构建步骤,依次选择所有功能模块任务,将它们的
serenity目录复制到主任务工作空间的独立子目录(比如modules/moduleA/serenity、modules/moduleB/serenity),避免文件覆盖冲突。 - 添加Maven/Gradle构建步骤执行聚合命令:
- Maven用户执行:
mvn serenity:aggregate -Dserenity.outputDirectory=target/merged-serenity -Dserenity.resultsDirectory=modules/**/serenity - Gradle用户执行:
gradle aggregate -Pserenity.resultsDir=modules/**/serenity -Pserenity.outputDir=target/merged-serenity
- Maven用户执行:
- 最后在主任务的Post-build Actions中归档
target/merged-serenity/**,方便随时查看合并后的报告。
- 添加Copy artifacts from another project构建步骤,依次选择所有功能模块任务,将它们的
- 注意事项:确保所有模块任务使用的Serenity版本完全一致,避免因版本差异导致的报告解析失败。
更简便的替代方案
如果想简化流程,推荐下面两种方案:
方案1:Jenkins Pipeline统一编排
放弃拆分多个独立任务,用一个Pipeline任务并行执行所有模块测试,之后直接生成合并报告,示例Pipeline片段:
pipeline { agent any stages { stage('Parallel Module Tests') { parallel { stage('Module A Tests') { steps { dir('module-a') { sh 'mvn clean verify serenity:test' } } } stage('Module B Tests') { steps { dir('module-b') { sh 'mvn clean verify serenity:test' } } } // 按需添加更多模块 } } stage('Generate Merged Report') { steps { sh 'mvn serenity:aggregate -Dserenity.resultsDirectory=*/target/site/serenity' } post { always { publishHTML(target: [ allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'target/site/serenity', reportFiles: 'index.html', reportName: 'Merged Serenity BDD Report' ]) } } } } }
优点:一站式管理测试与报告生成,减少Jenkins任务数量;并行执行测试还能缩短整体耗时,维护成本更低。
方案2:本地临时合并(适合非频繁需求)
如果只是偶尔需要合并报告,不需要修改Jenkins配置:
- 从各个Jenkins任务的"Artifacts"页面下载对应的
serenity目录压缩包; - 把所有
serenity目录解压到本地同一个父文件夹下(比如~/merged-tests/moduleA、~/merged-tests/moduleB); - 在本地执行聚合命令:
执行完成后,mvn serenity:aggregate -Dserenity.resultsDirectory=~/merged-tests/**/serenitytarget/site/serenity下就是合并后的报告。
内容的提问来源于stack exchange,提问作者JavaMan
相关产品推荐
相关产品推荐

