本文还是 adat 项目的延伸,瞄准开发周期的测试环节,主要介绍 Xcode 范畴内的测试概念和自动化测试实践,不会讨论如何编写高质量的测试用例。文中涉及到 Xcode 构建的许多概念,大部分已在前两篇文章中有所说明,建议先大致浏览一遍。
内容概览
- Xcode 测试相关的概念
- xcodebuild 命令中测试相关的用法
- xcodebuild 测试实践
- 存在的问题
Xcode 测试相关的概念
在开始测试之前,有必要简单介绍一下 Xcode 中测试相关的概念,这对于编写自动化测试命令非常重要。因为文中会反复提到这些概念,使用时也必须清楚这些概念之间的关系。
测试包
Test Bundle,专门用于测试的 Target。Xcode 13.1 新建项目时勾选 Include Tests 会自动创建单元测试包和 UI 测试包。测试包内组织了多个测试用例。
测试用例
Test Case,专门用于测试的类 Class,继承自 XCTestCase。在测试用例内导入需要测试的头文件,设置初始环境,并编写多个测试方法。
测试方法
Test Method,专门用于测试的方法,必须是实例方法且方法名必须以 test 开头且没有参数和返回值,否则不会被 Xcode 识别为测试方法,也就不会被自动调用。
单元测试
Unit Test,是一种测试维度,主要测试代码逻辑,粒度较细,依赖良好的架构设计并编写可测试的代码(Testable Code)。在测试方法中调用需要测试的代码,并用 XCTAssert 及相关方法来判断结果。
UI 测试
UI Test,在较粗维度上进行测试,模拟用户的操作。Xcode 用 UI Test Recorder 来记录操作序列,自动将序列以代码的形式插入到测试方法中,运行测试方法就是把序列“重放”一次,以观察同样的操作在不同设备环境上的表现。UI 测试可以在需要的位置进行截屏,保留现场。
测试计划
Test Plan,一个以 .xctestplan 为扩展名的 JSON 格式文件,组合了测试包和配置(Configuration),可以分别设置测试包、测试用例、测试方法是否启用以决定是否参与测试,配置包含一个默认配置和多个自定义配置,大部分配置项来自于 Scheme。自定义配置未指定的配置项由默认配置的对应配置项决定。
在 Scheme Manager 中,可以将 Scheme 转为测试计划,也可以在 Xcode -> Product -> Test Plan 创建新的测试计划。对于大型项目,建议将 Scheme 转为测试计划,因为测试计划包含更多配置项,比如启用测试超时、重复测试等,而且 JSON 文件比 Scheme 更易于版本管理。
必须要为测试计划创建至少一个自定义配置,否则测试计划内的任何测试都将无法运行。在将 Scheme 转为测试计划时,Xcode 帮我们自动完成了这个操作。你也可以添加额外的自定义配置。
测试报告
Test Reports,列出了每个测试用例的测试结果:执行步骤、耗时、截屏、日志等。
代码覆盖率
Code Coverage,显示测试用例覆盖了多少代码,Xcode 提供了可视化界面,可据此来完善测试用例。启用代码覆盖率并执行测试后,代码编辑器右边缘就会显示某行被测试的次数。
xcodebuild 命令中测试相关的用法
了解完测试相关的概念,结合 探究 Xcode 命令行用法一:Xcode 构建必备认知 一文对命令行的认知,就可以对 xcodebuild 测试命令进行分析了。在 Terminal 中执行man xcodebuild
提取测试相关的选项,对每个选项和操作的用法说