Gradle多模块项目中Serenity测试报告无法正常生成问题
Gradle多模块项目Serenity报告为空的解决办法
问题背景
我有一个Gradle多模块项目,结构如下:
-module1 - bddTests - serenity.properties -module2
在module1的serenity.properties中配置了:
serenity.outputDirectory=../target/site/serenity
测试运行成功后,根目录下的target/site/serenity是空文件夹。尝试在根目录添加serenity.properties并配置serenity.outputDirectory=target/site/serenity,问题仍未解决,但单模块Gradle项目中Serenity报告可正常生成。使用的依赖版本:
version("net.serenity-bdd:serenity-cucumber6", "2.6.0") version("net.serenity-bdd:serenity-reports:", "3.1.0") version("io.cucumber:cucumber-core:", "6.10.4") version("net.serenity-bdd:serenity-rest-assured", "2.6.0")
问题分析
- 多模块项目中,Serenity的路径解析基于当前模块的工作目录而非根项目目录,
../target/site/serenity的上下文解析容易出现异常,导致报告无法正确写入目标路径。 - Serenity默认不会自动合并多模块的报告,每个模块的报告只会生成在自身的
build目录下。 - Serenity依赖版本不一致(
serenity-reports3.1.0 vsserenity-cucumber62.6.0),可能引发兼容性问题导致报告生成失败。
解决步骤
1. 修正模块内的报告路径配置
修改module1的serenity.properties,将输出路径指向模块自身的build目录,确保报告能正常生成:
serenity.outputDirectory=build/site/serenity
2. 在根项目的build.gradle中添加报告合并任务
创建Gradle任务,将各模块的Serenity报告聚合到根目录的target目录:
// 聚合所有模块的Serenity报告到根目录 task aggregateSerenityReports(type: Copy) { from subprojects.collect { it.file("build/site/serenity") } into file("target/site/serenity") includeEmptyDirs = false // 跳过空目录,避免生成无效空文件夹 } // 绑定到测试任务,测试完成后自动执行聚合 subprojects.each { subproject -> subproject.tasks.withType(Test) { finalizedBy rootProject.aggregateSerenityReports } }
3. 统一Serenity依赖版本
将所有Serenity相关依赖的版本统一,消除兼容性风险:
// 在根项目build.gradle中定义统一版本变量 ext { serenityVersion = "2.6.0" cucumberVersion = "6.10.4" } // 在module1的build.gradle中使用统一版本 dependencies { implementation "net.serenity-bdd:serenity-cucumber6:${serenityVersion}" implementation "net.serenity-bdd:serenity-reports:${serenityVersion}" implementation "io.cucumber:cucumber-core:${cucumberVersion}" implementation "net.serenity-bdd:serenity-rest-assured:${serenityVersion}" }
4. 执行测试验证
运行根项目的test任务(或直接运行module1的test任务),测试完成后aggregateSerenityReports会自动执行,将module1的报告复制到根目录的target/site/serenity中,此时该目录应包含完整的Serenity测试报告。
内容的提问来源于stack exchange,提问作者Shabar
相关产品推荐
相关产品推荐

