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

发表于:2017-03-10来源:美团点评技术团队作者:美团点评技术团队点击数: 标签:iOSKIF
考虑选择测试框架的几种影响因素。首先,使用的语言和框架决定了 测试人员 的持续性学习成本,iOS 测试人员 对 Object C 和 XCTest 熟悉和掌握程度高,不

考虑选择测试框架的几种影响因素。首先,使用的语言和框架决定了测试人员的持续性学习成本,iOS 测试人员对 Object 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 抓取到了这个历史列表元素(如右图所示):

原文转自:https://zhuanlan.zhihu.com/p/22283843