KIF

KIF GitHub描述:
    KIF, which stands for Keep It Functional, is an iOS integration test framework. 
    It allows for easy automation of iOS apps by leveraging the accessibility attributes that the OS makes available for those with visual disabilities.

前段时间,在 Blog 上看到,Google Chrome 的 iOS 版也使用到了 KIF 作为测试工具。

后来自己按照网上的几篇 Blog 和官方的文档,试着整合到自己的项目中,都失败。

这两天翻看 EverNote 时发现,竟然在半年以前就把 KIF 的某些 Blog 存在了自己的 EverNote 了。
于是又折腾了下 KIF,终于搞定,可以运行测试案例了。

KIF Demo 项目

用来 Demo 的项目是这个KIF Tutorial Blog中提到的Solanum

下载 Solanum XCode Project

Solanum XCode 源码,按此下载。

处理 Solanum 源码

将 Solanum 压缩包作解压缩包,得到文件夹kif-solanum
由于 Tutorial 已经是很久以前的了,所以在我的机器上,整合好的 KIF 是跑不通了,出 Error。
所以这里,要做些处理。

打开 Solanum 源码文件夹:

KIF 安装

KIF 安装支持 CocoaPods 整合,GitHub 方式整合,也支持源码手动整合。

由于之前没有 CocoaPodsd 的使用经验,此处就使用源码手动整合。

  1. 打开 Solanum 源码文件夹。
  2. 在 Solanum 源码文件夹根目录下,新建文件夹Frameworks
  3. 在新建文件夹Frameworks目录下。
  4. 在 GitHub 下载 KIF 项目源码,点此下载
  5. 将 KIF 项目源码解压缩到Frameworks目录下,可以将 KIF 源码文件夹重名为KIF

下面操作,是在 XCode 的 Salanum 项目中。

  1. 新建Target,选择 iOS-->Other-->Cocoa Touch Testing Bundle。`
  2. Product Name = "UITest",Language = Objective-C, Target to be Tested = "solanum",之后点Finish按钮,完成测试 Targe 的创建。
  3. 在上面的 KIF 项目源码文件夹中,找到 KIF 项目的 XCode 项目文件KIF.xcodeproj
  4. KIF.xcodeproj拖到 Solanum XCode 中左边导航栏的 UITest 文件目录下。按照 KIF 的 GitHub 指导,是个坑,它说是拖动到导航栏中就可以,其实是要拖到测试目标的文件夹内才行的。



下面是配置测试目标UITest

1. 选中 Target`UITest
2. 在 Build Phases-->Link Binary With Libraries 中,添加libKIF.aCoreGraphics.frameworkIOKit.framework
3. IOKit.framework这个,可能会搜索不到,可以在 Xcode 里面找到,假设你的 Xcode 的路径是/Applications/XCode.appIOKit.framework在路径/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKS/iPhoneOS.sdk/System/Library/Frameworks可以找到,找到后,直接把IOKit.framework拖进去就可以了。
4. 在 Build Settings-->Search Paths-->Framework Search Paths 中,把$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks删掉。
5. 在 Build Settings-->Linking-->Other Linker Flags 中,添加-ObjC


而此,就完成了测试 Target 的配置了。

写个 Test Case 跑一跑

既然整合好了,那就写个 Test Case 试一试了。

  1. 在 UITest 文件夹下,新建文件。
  2. 选择 iOS-->Source-->Cocoa Touch Class
  3. Class: "UITest", Subclass of: "KIFTestCase", Language: "Objective-C"。
  4. 测试 Target 一定要选"UITest"。

打开 UITest.m,将下面的代码加进 implement 中。

 - (void)beforeAll {
     [tester tapViewWithAccessibilityLabel:@"Settings"];
     [tester setOn:YES forSwitchWithAccessibilityLabel:@"Debug Mode"];
     [tester tapViewWithAccessibilityLabel:@"Clear History"];
     [tester tapViewWithAccessibilityLabel:@"Clear"];
     [tester waitForTimeInterval:1];
}





保存后,按COMMAND + U,就开始跑 Test Case 了。
可以看到,Solanum 在 iPhone Simulator 构建完后,KIF 就开始接管了。

问题

很奇怪的是,按照 TestNG 或 JUnit 的经验,beforeAll() 方法应该是每个 Test Case 首先跑的,很多时候,测试人员都会在这里放一些测试前的设置代码。
但在 KIF 中,在我的机器上,经常出现,beforeAll() 方法不会跑的情况。
原因未知,还没找到解决方法。


↙↙↙阅读原文可查看相关链接,并与作者交流