前言

iOS自动化测试一直不如Android的方便,最近没事看简单看了下,分别基本使用了一下自动化框架QuickKIF,做一些简单的介绍。

配置

  • 必须将Target设置为Unit Test,根据GitHub官方说明
  • 查看GitHub的ReadMe,使用Cocoapod进行安装,命令如下(在Debug模式下才生效):
    1
    pod 'KIF', :configurations => ['Debug’]
  • 根据Github ReadMe直接跳到Final Test Target Configurations 进行设置即可,其实如果是创建工程的时候就勾选了单元测试或UI测试,这一步Xcode是帮我们设置好了的
  • 接着跳到Use with Swift, ReadMe说需要建立bridge header,来引入KIF.h,我的实践证明是可以直接import KIF的,相反使用bridge header反而找不到KIF库。
  • Swift使用KIF需要extension以使用tester和system常用函数,代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    extension XCTestCase {
    func tester(file : String = #file, _ line : Int = #line) -> KIFUITestActor {
    return KIFUITestActor(inFile: file, atLine: line, delegate: self)
    }

    func system(file : String = #file, _ line : Int = #line) -> KIFSystemTestActor {
    return KIFSystemTestActor(inFile: file, atLine: line, delegate: self)
    }
    }
    更多请其他的操作参考官方GitHub ReadMe

###accessibilityLabel设置

  • KIF是通过苹果的辅助功能,即accessibilityLabel进行的TabBarController中的TabBarItem设置accessibilityLabel就是他的Bar Item Title,如图:
    image.png

  • 其他的原生控件,如果是使用Storyboard或xib的Interface builder,则可以直接添加,如图:
    image.png

  • 某些控件在Interface Builder中并没有对应设置accessibilityLabel的地方,它可能是隐藏在了苹果辅助功能的API之下,如TableView,如果你要启用它的accessibilityLabel辅助功能,可以通过代码添加,代码如下:

    1
    2
    [self.tableView setAccessibilityLabel:@"History List"];
    [self.tableView setIsAccessibilityElement:YES];

使用Tip

  • 注意测试方法以test命名开始,并按照指定排序进行,如test01 —> test02 … 非test开始的命名测试不会走`,适合在自定义方法时使用

  • 对于专门为测试服务的accessibilityLabel设置,在代码中使用#ifdef DEBUG …  #endif来包裹,因为这些代码对你的APP正常运行没有直接管理,仅为了测试服务

  • 按钮的title、类的title,可以直接做为访问标签

  • 如果UI组件被键盘挡住了,需要先退掉键盘;如果UI组件不在屏幕范围内,不可以访问,但是滚动视图,可以访问,且会出现在可视范围。

  • 无法访问系统自己的弹窗。例如app想定位用户,不能自动点击允许;但是app自己的弹窗,可以操作的

写在结尾

对iOS自动化测试研究不深,平时也很少用到,希望能够有更好的测试框架和更简易的教程出来。
Demo地址