翻译:使用Xcode测试(八)——用户界面测试(User Int
UI测试可以找到应用UI并与之交互,以验证UI元素的属性和状态。
UI测试包括UI录制,它可以生成代码测试应用UI。UI录制是编写UI测试快速入门的好方法。
测试报告提供了关于UI测试的详细信息,包括测试失败时UI状态的快照。
UI取决于两大核心技术:XCTest框架和可访问性。
-
XCTest提供UI测试框架,集成到Xcode。创建和使用UI测试拓展了你对XCTest的使用和创建单元测试的认知。创建UI测试target,创建UI测试类和UI测试方法作为项目的一部分。使用SCTest断言验证预期的结果是否正确。也可以通过Xcode服务和xcodebuild持续集成。XCTest完全兼容Objective-C和Swift。
-
可访问性是允许残疾用户和其他用户体验到iOS和OS X丰富的用户体验的核心技术。它包括一个丰富的语义数据集,在应用使用中,用户可以使用。可访问性与UIKit和AppKit交互,并提供API允许你微调暴露给外部用户使用的行为。UI测试可以使用该数据执行其函数。
在源代码中创建UI测试与创建单元测试类似。为应用创建一个UI测试target,然后Xcode创建一个默认UI测试组合实现文件,在实现文件中有测试方法模版例子。当你创建UI测试target,可以指定测试哪个app。
用户测试通过寻找应用的UI对象,合成事件并将他们发送到这些对象,并提供丰富的API使你可以检查UI对象的属性和状态,并与预期状态对比。
要求
UI测试取决于开发工具和OS平台的服务和API。你需要Xcode7, OS X 10.11 EI Capitan和iOS 9 (或更新版本)。UI测试保护隐私:
-
iOS设备需要启用开发并连接到一个受信的主机。
-
OS X需要给予特殊的Xcode助手应用权限。在第一次使用UI测试时会收到此提示。
iOS设备需要启用开发并连接到一个受信的主机。OS X需要给予特殊Xcode助手应用权限(在第一次自动提示)。
概念和API
UI测试与单元测试在本质上不同。单元测试让你能够在应用范围内测试功能和方法,充分访问应用的变量和状态。UI测试以相同方式测试应用UI,用户不需要访问应用的内部方法、函数和变量。这使你的测试与用户相同的方式使用应用,暴露用户在使用过程中遇到的UI问题。
测试代码作为一个单独的进程,合成应用中UI事件。
APIs
UI测试基于以下三个类实现:
- XCUIApplication
- XCUIElement
- XCUIElementQuery
开始使用UI录制
从UI录制开始。它生成源代码到测试的实现文件中,可以编辑修改以构建测试或回访一个特定使用场景。UI录制也有助于探索新UI货学习如何编写UI测试序列。操作的基本顺序是:
- 使用测试导航,创建UI测试目标。
- 在创建的模板文件中,将光标放置到测试函数中。
- 开始UI录制。
- 启动和运行应用。做一系列的UI动作测试应用。Xcode捕获操作并生成函数的源代码。
- 当你完成测试操作时,停止UI录制。
- 添加XCTest断言源代码。
编写UI测试
API测试有功能和性能测试,也可以进行UI测试。UI测试操作app界面并集成大量低层次功能响应UI。
UI测试从根本上操作事件及响应。
- 查找元素。
- 了解元素的预期行为作为参考。
- tap或click元素引出一个响应。
- 测量响应匹配或不匹配预期,生成通过或失败的结果。
使用XCTest创建UI测试与创建单元测试类似。在整体上操作和编程方法是类似的,不同的是UI测试的基本概念以及如何操作UI测试。详见用户界面测试( User Interface Testing)。
在测试类结构中,所提供的setup方法与单元测试类中的setup方法有两个不同。
<pre><code>
-(void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test
method in the class.
self.continueAfterFailure = NO;
[[[XCUIApplication alloc] init] launch];
}
</pre></code>
默认设置self.continueAfterFailure
的值为NO。这通常是正确的配置,因为在一个UI测试方法中每一步往往取决于前面的成功,如果前面一个步骤失败,则后续所有测试也是失败的。
setup方法包括创建XCUIApplication
实例并启动它。UI测试必须启动测试的应用,因为setup在每个测试方法前运行,这确保应用中的每个测试方法都启动。
当编写UI测试方法,你应该使用UI录制功能创建测试的基本步骤。然后编辑你想要的顺序,使用XCTest断言提供成功或失败结果。UI测试有功能和性能测试,就像单元测试一样。
UI测试一般模式是:
- 使用XCUIElementQuery查找XCUIElement。
- 合成事件并将其发送到XCUIElement。
- 使用断言来比较XCUIElement的状态和预期参考状态。
构建性能UI测试,包装一系列可重复UI步骤到measureBlock
结构,参见编写性能测试( Writing Performance Tests)。