基于 KIF 的 iOS UI 自动化测试和持续集成

本文介绍猫眼测试团队在iOS客户端实践的基于KIF的UI自动化测试和持续集成过程,涵盖测试框架选择、KIF自动化实施、用例编写、持续集成搭建及常见问题解决。

客户端 UI 自动化测试是大多数测试团队的研究重点,本文介绍猫眼测试团队在猫眼 iOS 客户端实践的基于 KIF 的 UI 自动化测试和持续集成过程。

一、测试框架的选择

iOS UI 自动化测试框架有不少,其中 UI Automation 是 Apple 早期提供的 UI 自动化测试解决方法,用 JavaScript 编写测试脚本,通过标签和值的可访问性获得 UI 元素,来完成相应的交互操作。

一些第三方 UI 解决方案以 UI Automation 为基础,对其进行补充和优化,包括扩展型 UI Automation 和驱动型 UI Automation。

  • 扩展型 UI Automation 采用 JavaScript 扩展库方法提高 UI Automation 的易用性,常见的框架有 TuneupJs、ynm3k。
  • 驱动型 UI Automation 在自动化测试底层使用了 UI Automation 库,通过 TCP 等通信方式驱动 UI Automation 来完成自动化测试。这种方式下,编辑脚本的语言不再局限于 JavaScript 。常见的框架有 iOSDriver、Appium。

还有一些其他的第三方解决方案,常见的框架类型有私有 API 型和注入编译型。

  • 私有 API 型框架直接使用 Apple 私有 API 对 UI 界面进行操作。常见的框架主要有 KIF。
  • 注入编译型框架在编译时注入一个 Server 到 App 内部,通过 Server 对外通信完成 UI 操作指令的执行。常见的框架有 Frank、Calabash。

Xcode 7发布后,Apple 提供了一种新的 UI 自动化测试解决方法——UI Testing,它基于 XCTest 测试框架,通过控件的可访问性来定位和获取控件,并提供了多种 UI 操作 API,使用源码语言,能方便地进行调试。 我们在以上分类中挑选具有代表性的自动化框架:UI Automation、Appium、KIF、Frank、UI Testing 进行对比,下表是这几种测试框架的特点对比:

考虑选择测试框架的几种影响因素。首先,使用的语言和框架决定了测试人员的持续性学习成本,iOS 测试人员对 Objective—C 和 XCTest 熟悉和掌握程度高,不需要消耗额外的学习成本,人员更替时的接手成本也相对较低;其次,测试框架支持的 UI 操作的丰富性决定了测试用例的覆盖完整度,使用私有 API 的测试框架支持的 UI 操作较为全面,而同时支持 UIWebView 的测试框架则更占优势;另外,App 程序 UI 变化快,使用开发效率高、调试方便的测试框架能使我们在适应新 UI 变化、新需求时获得更小的投入产出比。 综合以上考虑,KIF 框架已经展现了他的优势,并且 KIF 使用 XCTest 框架,使得其测试流程 iOS 程序的单测无异,可完全复用单测的持续集成流程,维护持续集成的成本相对降低;另外,KIF 是一个活跃的开源测试框架,可扩展性好,升级更新快,有活跃社区来探讨和解决使用过程中遇到的问题。鉴于上述优势,我们选择了 KIF 作为 iOS 的 UI 自动化测试框架。

二、KIF 自动化实施

KIF 利用 Apple 给所有控件提供的辅助属性 accessibility attributes 来定位和获取元素,完成界面的交互操作;结合使用 Xcode 的 XCTest 测试框架,拥有 XCTest 测试框架的特性,使得测试用例能以 command line build 工具运行并获取测试报告。

下面介绍如何进行 KIF 自动化实施。

1. KIF 搭建

KIF 以第三方库的形式编译运行于工程中,搭建 KIF 之前,应该确保工程在 Xcode 上编译运行通过。 KIF 基于 XCTest 框架,继承了 XCTest 的所有特性。和 XCTest 一样,我们首先应该在工程项目中创建基于 Cocoa Touch Testing Bundle 模板的 Target ,并确保创建的 Target 的属性有如下设置:

  • “Build Phases”:设置 Target Dependencies , UI 自动化测试固然要依赖应用程序的 App 产物,所以需保证应用程序 Target 被添加在 Test Target 的 Target Dependencies 中。
  • “Build Settings”:     设置 “Bundle loader” 为:$(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp;     设置 “Test Host” 为:$(BUILT_PRODUCTS_DIR);     设置 “Wrapper Extensions” 为:xctest。

项目的设置准备好后,需要安装 KIF 库源码到项目。即可开始 KIF 编写用例之旅。 KIF 通过属性值(AccessibilityLabel, AccessibilityIdentifier, AccessibilityTraits,Value…)在界面中定位元素。为了获取到目标元素,我们必须先设置元素的 accessibility 属性。如下,想要获取程序中一个列表的 cell 元素,我们给列表的 cell 控件设置 accessibility 属性(如左图所示),设置为“Section XX Row XX”,编译运行,即可获得历史列表的 cell 元素;用模拟器的 Accessibility Inspector 抓取到了这个历史列表元素(如右图所示):

KIF 为我们提供了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值