Test With Xcode Part-1:UI Test First Sight

测试让你能够定位并和应用的用户界面交互,以验证UI元素的属性和状态。

UI测试包括UI录制,能够生成代码,像实际操作的那样去操作应用的界面元素,这些代码也可以扩展实现成为真正的UI测试.

UI测试基于两项核心技术: XCTest框架和Accessibility

  • XCTest 提供了一个集成在XCode内的UI测试框架, 创建和使用UI测试与使用XCTest进行单元测试的流程类似。创建一个UI test target, 创建一个UI test classes和UI test methods作为项目的一部分。使用XCTest断言来验证期望的输出是否正确。也可通过Xcode server和xocdebuild来实现持续集成。XCTest同时兼容Obe-c和Swift.

  • Accessibility作为一项核心技术,可以让残疾用户在iOS和OS X系统上得到和其他用户同样丰富的体验。它包括一套关于UI的丰富的语义数据集(rich sef of semantic data),可用于在应用中引导用户。Accessibility在UIKit 和AppKit中都集成了,并且包含了供外部调用的API. UI test使用这些数据来实现功能。

UI测试通过查询找到应用的UI对象,生成事件并将事件发送给UI对象,并且提供了一套丰富的API用于检查UI对象属性和状态。

Requirements

  • Xcode 7
  • OS X 10.11 EI Capitan or later
  • iOS 设备的开发者功能已启用并连接到一个可信任的主机
  • OS X 需要授权一个特别的 Xcode Helper app, 这会在你首次使用UI test的时候自动弹出

APIs

  • XCUIApplication
  • XCUIElement
  • XCUIElementQuery

UI测试包括几个基本步骤:

  1. 查询找到UI元素
  2. 了解这个元素的期望行为
  3. 对元素进行操作以获取响应
  4. 判断响应是否符合期望结果, 测试pass/fail

以上是Apple官方文档中关于使用XCT进行UI测试的所有内容了(截止本文发布时,官方文档最近更新时间为2016-03-21, Updated for Xcode 7.3.)

尝试查找API手册,结果是这样的发现相关类的说明文档缺失,链接为灰色

没办法,那就直接从Xcode中去实际用用看.

在Xcode里面新建一个工程ButtonTest,选择Single View Application, 创建的同时勾选上Include UI Test
完成创建后,在Project Navigator里面是这样的:

然后我们在Main.storyboard里面添加一个button, 并不用实现任何代码,可直接编译通过。
为了避免自动布局带来的问题,直接把storyboard中设置为使用4.7寸屏,模拟器也使用iPhone5s。
然后在Test Navigator中,直接运行ButtonTestUITest, 测试结果为PASS(因为还未实现任何测试)

来仔细看看示例测试代码

按照官方文档所推荐的那样,我们来试试点击开始使用录制功能。
点击录制后,模拟器启动,进入应用主界面,对这个测试应用来说,仅仅显示了一个button.
点击button, 在ButtonTestUITest.m文件中当前光标定位处,出现了点击操作的录制代码

1
[[[XCUIApplication alloc] init].buttons[@"Button"] tap];

看来录制功能用起来没什么问题,利用这个功能大大加快测试脚本的编写效率。
下次我们再来仔细看看 XCUIApplication,XCUIElement, XCUIElementQuery这几个类,以及XCTest中Assertion的部分。