Fix failures faster with Xcode test reports
Developer Tools 进阶 20m

用 Xcode 测试报告更快定位失败

Fix failures faster with Xcode test reports

2023年6月5日

在 Apple 官方观看视频

一句话判断

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 内完成。
WWDC 2023