DoorDash 工程师 Matheus Gois 表示,结合 Copilot 以及强大的可靠性保障措施,DoorDash将他们基于iOS XCTest的测试套件迁移到了Swift Testing,快速、安全地完成了一个大型测试套件的现代化改造,并获得了可度量的性能提升。
据 Gois 称,DoorDash 工程师预计迁移将带来更好的性能和更准确的故障诊断。他们的基准测试证实,Swift Testing 比 XCTest 快四到七倍,这在很大程度上归功于其能够并行运行同步和异步代码的能力。此外,#expect 宏提供了更丰富的失败信息,这有助于加快调试速度。
运行速度缓慢且大部分串行化的 XCTest 运行阻塞了 DoorDash 的 iOS 持续集成(CI)管道。随着我们的应用程序和共享包不断增长,CI 测试步骤的分钟时长延长到了两位数,消耗了更多的 CI 资源,并减慢了每位工程师的迭代速度。
为了使迁移能够在公司范围内扩展,DoorDash 将自动化与清晰的工程原则相结合:每个团队负责迁移自己的测试,使用一套共同的工具和指南;工具优先的方法确保了所有的团队都采用一致且可重复的工作流程;而严格的可靠性检查点则最大限度地降低了迁移后测试出现不稳定现象的风险。
Gois 解释说,DoorDash 工程师构建了一个开发者友好的环境,使用了 AI 编码助手 Cursor、SweetPad for Visual Studio Code/Xcode 集成以及一个自定义的 MCP 服务器,使工程师能够在迁移前后直接在编辑器内构建目标和运行测试:
主要暴露的工具是 execute_vscode_command,它接受一个 commandId,如 sweetpad.build.build 或 sweetpad.build.test,并运行该操作。服务器会在 SweetPad 扩展激活时自动启动,并在编辑器关闭时停止。
为了“教”Cursor 迁移测试,他们定义了一个“迁移规则”,可以自动完成从 XCTest 到 Swift Testing 的大部分机械转换,如更改导入语句、将 XCTAssert 转换为 #expect、插入 @Test 宏以及按需处理 async/await 等。这使得工程师能够专注于正确性而不是语法变化。
为了确保可靠性,每个迁移的测试必须连续十次运行通过,消除任何不稳定性和时间敏感性之后才能被采纳。
在迁移过程中,DoorDash 工程师采用了 Bazel,这要求他们稍微扩展下他们的代理工作流。具体来说,他们将 bazel test 命令直接包含在提示词中,使代理能够在没有手动干预的情况下在本地运行测试。这同时也支持了一个迭代循环:代理运行测试并修复任何出现的错误,并重复该过程,直到获得一次无错误的执行结果。
这使得 Bazel 始终处于可靠性保障的核心位置。无论是从本地终端还是通过 SweetPad 和 Cursor 触发测试,运行目标是相同的,都遵守相同的十次运行规则,而且每个包都要达到相同的标准。
这个过程揭示了一些隐藏的问题,如共享状态、顺序依赖和时间假设。这些问题之前大部分都被 XCTest 的顺序执行所掩盖了,但被 Swift Testing 的并行模型所暴露。
总体而言,迁移到 Swift Testing 使 CI 中的测试执行速度提升了大约 60%,整体构建速度提升了大约 40%,这降低了基础设施成本,节省了开发者的时间。要了解更多详情,包括所用 Copilot 提示词的摘录,请参阅原文。
原文链接:
https://www.infoq.com/news/2026/05/doordash-copilot-swift-testing/