用 Xcode 测试报告更快定位失败
Fix failures faster with Xcode test reports
2023年6月5日
一句话判断
Xcode 15 的全新测试报告不只是 UI 改版——Insights 模式自动识别”多个测试因为同一原因失败”这类模式,在大型测试矩阵中能省下大量排查时间。
这场 Session 讲了什么
Session 详细介绍了 Xcode 15 中重新设计的 Test Report,覆盖本地测试、Xcode Cloud CI 测试、远程机器测试的结果展示。
先梳理了测试的层级结构:Test Plan > Test Bundle > Test Class > Test Method。配合 Configuration(语言、地区、代码覆盖率等)和 Run Destination(设备),形成一个完整的测试矩阵。每个”测试方法 + 配置 + 设备”的组合称为一个 Test Method Run。
新的测试报告提供:
Test Summary(测试概览):
- 高层概览:测试环境、测试计划详情、特殊特征(重复测试、性能指标)。
- 热力图:在多设备多配置的矩阵中快速定位哪些组合表现最差。
- 快速访问所有失败测试。
- Insights 洞察模式。
Insights(洞察模式)——核心亮点:
- Common Failure Patterns:自动将失败消息相似的测试分组。如果你的 10 个测试中有 3 个因为同一个 API 返回 nil 而失败,Insights 会告诉你”这 3 个测试共享相似的失败信息”。
- Longest Test Runs:列出耗时最长的测试,帮助识别性能瓶颈。
Test Details(测试详情):
- 单个测试方法的专用视图,展示跨所有配置和设备的结果。
- 失败信息、截图、Activity 日志集中展示。
- UI 测试的调试工具增强——更丰富的失败信息和截图。
值得深挖的点
Common Failure Patterns 在大型 CI 中的价值被低估了。想象你有 200 个测试在 5 个设备 3 种语言配置下运行,总共 3000 个 Test Method Run。如果其中 45 个失败,人工逐个看是不现实的。Insights 会自动发现”其中 30 个失败都是同一个 assert 失败”,你只需要调查一个根本原因而不是 30 个。
热力图(Heat Map) 是理解多维度测试结果的最佳可视化方式。行是设备,列是配置,颜色表示通过率。一眼就能看出”法语配置在 iPad 上失败率异常”这种跨维度模式。这比以前的纯数字列表有效得多。
Test Method Run 的概念 是理解新测试报告的关键。你看到的不是”一个测试通过了”,而是”这个测试在 iPhone 14 + 英语配置下通过了,但在 iPhone SE + 法语配置下失败了”。这种粒度的结果展示对国际化测试尤其有价值。
代码片段
测试报告本身不需要代码,但理解测试结构有助于使用:
// 测试层级结构示例
// Test Plan: "Backyard Birds 完整测试"
// └─ Test Bundle: "BackyardBirdsUITests"
// └─ Test Class: "LocalizationTests"
// └─ Test Method: "testGardenSupplies()"
// Test Method Run = testGardenSupplies()
// + Configuration: French/France
// + Run Destination: iPhone 14 Pro
// = 一个具体的测试结果实例
// Insights 会自动发现这种模式:
// "3 个测试在法语配置下失败,共享相似错误信息:
// 'XCTAssertEqual failed: Optional("") is not equal to Optional("Jardin")'"
// → 本地化字符串缺失
Xcode Cloud 中查看测试报告:
// Xcode Cloud 工作流自动运行测试
// Build Overview 中可以看到:
// - 触发条件(PR、定时、手动)
// - 代码变更
// - 各 action 的结果
// 点击 Test Action 进入测试报告
// Test Summary → 查看热力图和 Insights
// 点击 Insight → 查看共享失败模式的详情
// 点击具体 Test Method Run → 查看详细失败信息和截图
最佳实践
- 在 Test Plan 中配置多种语言和地区的 Configuration,让 Xcode Cloud 自动运行国际化测试矩阵。
- 测试失败时先看 Insights 的 Common Failure Patterns,优先处理影响面最广的失败。
- 利用热力图快速识别”某个设备或配置系统性失败”的模式——这通常指向环境问题而非代码 bug。
- UI 测试失败时查看新报告提供的截图和 Activity 日志,新版本的失败信息更丰富。
- 对于耗时过长的测试,参考 Longest Test Runs 洞察,考虑拆分或优化。
- 在 CI 中设置质量门禁,Xcode Cloud 的测试结果可以直接触发通知或阻止合并。
还有什么值得关注
- 测试报告同时支持本地和 Xcode Cloud 的测试结果,UI 体验一致。
- Xcode Cloud 支持多 Run Destination,本地测试只能选一个设备。这意味着多设备测试矩阵更适合在 CI 中运行。
- UI 测试的截图功能在新报告中增强,失败时自动截图并提供更丰富的上下文。
- Test Plan 的 Configuration 支持 Test Repetitions(重复运行)和 Performance Metrics(性能指标),新报告对这些信息有专门的展示区域。
- 搭配 Xcode 15 的 Streamlined Distribution 功能,从测试到发布的整个流程都在 Xcode 内完成。