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,终于搞定,可以运行测试案例了。
用来 Demo 的项目是这个KIF Tutorial Blog中提到的Solanum。
下载 Solanum XCode Project
Solanum XCode 源码,按此下载。
处理 Solanum 源码
将 Solanum 压缩包作解压缩包,得到文件夹kif-solanum
。
由于 Tutorial 已经是很久以前的了,所以在我的机器上,整合好的 KIF 是跑不通了,出 Error。
所以这里,要做些处理。
打开 Solanum 源码文件夹:
KIF-2.0.0
,UI Tests
给删了。solanum.xcworkspace
,在 XCode 打开。TARGETS
清单的UI Tests
删了。KIF 安装支持 CocoaPods 整合,GitHub 方式整合,也支持源码手动整合。
由于之前没有 CocoaPodsd 的使用经验,此处就使用源码手动整合。
Frameworks
。Frameworks
目录下。Frameworks
目录下,可以将 KIF 源码文件夹重名为KIF
。
下面操作,是在 XCode 的 Salanum 项目中。
Target
,选择 iOS-->Other-->Cocoa Touch Testing Bundle。`Product Name
= "UITest",Language
= Objective-C, Target to be Tested
= "solanum",之后点Finish
按钮,完成测试 Targe 的创建。KIF.xcodeproj
。KIF.xcodeproj
拖到 Solanum XCode 中左边导航栏的 UITest 文件目录下。按照 KIF 的 GitHub 指导,是个坑,它说是拖动到导航栏中就可以,其实是要拖到测试目标的文件夹内才行的。
下面是配置测试目标UITest
1. 选中 Target`UITest
。
2. 在 Build Phases-->Link Binary With Libraries 中,添加libKIF.a
,CoreGraphics.framework
,IOKit.framework
。
3. IOKit.framework
这个,可能会搜索不到,可以在 Xcode 里面找到,假设你的 Xcode 的路径是/Applications/XCode.app
,IOKit.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 试一试了。
Class:
"UITest", Subclass of:
"KIFTestCase", Language:
"Objective-C"。打开 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() 方法不会跑的情况。
原因未知,还没找到解决方法。