You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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")

问题分析

  1. 多模块项目中,Serenity的路径解析基于当前模块的工作目录而非根项目目录,../target/site/serenity的上下文解析容易出现异常,导致报告无法正确写入目标路径。
  2. Serenity默认不会自动合并多模块的报告,每个模块的报告只会生成在自身的build目录下。
  3. Serenity依赖版本不一致(serenity-reports 3.1.0 vs serenity-cucumber6 2.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:09:23