Android JUnit4测试未在CircleCI测试摘要中显示的问题排查
解决CircleCI Android测试摘要(Test Summary)不显示的问题
首先明确一点:Gradle 5.2.1生成的Android测试报告是被CircleCI支持的,问题出在你的store_test_results配置路径上。
CircleCI的Test Summary功能依赖的是JUnit格式的XML测试结果文件,而不是你当前通过store_artifacts上传的HTML报告。你之前的配置里,store_test_results指向的test-results路径大概率没有包含正确的XML文件——因为Android Gradle插件默认会把单元测试的XML结果生成在每个模块的build/test-results/testDebugUnitTest/目录下,而不是build/reports/tests/(这个目录是HTML报告的位置)。
两种可行的修复方案
方案1:直接配置多个测试结果路径
CircleCI支持多次调用store_test_results,你可以直接把每个模块的XML结果路径都配置进去:
# 保留你现有的store_artifacts配置,用于HTML报告 - store_artifacts: path: module1/build/reports/tests/testDebugUnitTest/ destination: test-results/module1 - store_artifacts: path: module2/build/reports/tests/testDebugUnitTest/ destination: test-results/module2 # 修改store_test_results,指向每个模块的XML结果目录 - store_test_results: path: module1/build/test-results/testDebugUnitTest/ - store_test_results: path: module2/build/test-results/testDebugUnitTest/
这样CircleCI会自动扫描每个路径下的XML文件,汇总生成Test Summary。
方案2:用Gradle任务统一收集测试结果
如果模块较多,不想重复配置路径,可以在项目根目录的build.gradle中添加一个Gradle任务,把所有模块的XML测试结果复制到一个统一目录,再让CircleCI读取这个目录:
// 根build.gradle中添加 task collectTestResults(type: Copy) { // 遍历所有子模块,收集测试XML from subprojects.collect { it.file("build/test-results/testDebugUnitTest/") } // 统一输出到根目录的build/test-results/allModules into file("$buildDir/test-results/allModules") include "*.xml" } // 确保这个任务在所有单元测试完成后自动执行 subprojects.each { project -> project.tasks.withType(Test) { finalizedBy collectTestResults } }
然后修改CircleCI的config.yml:
# 先执行收集任务 - run: name: Collect all test results command: ./gradlew collectTestResults # 存储统一目录下的XML结果 - store_test_results: path: build/test-results/allModules # 保留原有的HTML报告上传配置 - store_artifacts: path: module1/build/reports/tests/testDebugUnitTest/ destination: test-results/module1 - store_artifacts: path: module2/build/reports/tests/testDebugUnitTest/ destination: test-results/module2
验证方法
配置完成后重新运行CI,你可以在CircleCI的“Tests”标签页(也就是Test Summary)看到汇总的测试结果,包括通过/失败的用例数,点击还能查看具体失败的用例详情。
内容的提问来源于stack exchange,提问作者Jacques.S
相关产品推荐
相关产品推荐

