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