Gradle默认不生成HTML测试报告,需启用test.reports.html.enabled=true;多模块项目需用TestReport任务聚合子项目XML结果生成统一报告,但不包含日志详情。

test 任务默认只生成 XML 格式的结果(在 build/test-results/test/ 下),不带 HTML 报告。要生成可读的 HTML 测试报告,得显式启用或配置 TestReport 任务。
test 任务的 reports.html.enabled = true 是最简方式
Gradle 的 test 任务自带 HTML 报告开关,但默认是关闭的。只要项目已应用 java 插件,就能直接启用:
-
在
build.gradle中添加:test { reports.html.enabled = true } 运行
./gradlew test后,报告会生成在build/reports/tests/test/index.html打开该文件即可查看失败用例、执行时间、包结构等基础信息
注意点:
- 这个报告只汇总当前项目的
test任务结果,不跨模块 - 如果项目有多个子项目,每个子项目都会生成独立报告,不会自动合并
- 报告内容基于
TEST-*.xml文件解析,所以必须确保测试成功运行(哪怕有失败用例,XML 仍会生成;但若 JVM 崩溃或测试未启动,则无数据)
多模块项目需用 TestReport 类型手动聚合
子项目各自跑 test,HTML 报告分散,不利于整体审视。这时要用 TestReport 任务把所有子项目的 test 结果合并成一份:
-
在根项目
build.gradle中添加:task testReport(type: TestReport) { destinationDir = file("$buildDir/reports/allTests") reportOn subprojects*.test } 运行
./gradlew testReport,结果输出到build/reports/allTests/index.html
关键细节:
-
reportOn接收的是Task实例列表,不是字符串名,所以写subprojects*.test(星号展开语法) - 被聚合的子项目必须已启用
test任务,且其test.reports.xml.enabled为true(默认就是) - 若某个子项目禁用了 XML 报告(比如设了
test.reports.xml.enabled = false),它就不会出现在聚合报告中
和 JaCoCo 覆盖率报告别混了
HTML 测试报告(展示“哪些测试通过/失败”)和 JaCoCo 的 HTML 覆盖率报告(展示“哪些代码行被执行过”)是两套东西:
- 前者由
Test或TestReport任务生成,依赖TEST-*.xml - 后者由
jacocoTestReport任务生成,依赖jacoco.exec文件
常见误操作:
- 以为开了
jacocoTestReport就等于有了测试执行报告 —— 不是,它不显示用例状态 - 在
testReport里误传jacocoTestReport任务(类型不匹配,会报错) - 把
build/reports/tests/test/和build/reports/jacoco/test/路径搞混
真正容易被忽略的是:HTML 测试报告不包含日志输出或堆栈详情。点击失败用例只能看到简短消息,完整异常仍得翻 build/test-results/test/TEST-*.xml 或控制台输出。如果需要带详细日志的 HTML 报告,得换 TestNG + testng-xslt 这类方案,Gradle 原生不支持。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











