Google推出iOS功能性UI测试框架EarlGrey

通过了一段时间的酝酿后,Google很高兴地宣布了EarlGrey,一款针对于iOS的功能性UI测试框架。诸如YouTube、Google Calendar、Google Photos、Google Translate、Google Play Music等多款Google应用都成功地采用了EarlGrey框架来知足其功能性测试之所需。xcode

EarlGre的特色

EarlGrey所提供的主要特性以下所示,这些特性使得应用的测试变得更加轻松,也更具效率:网络

  • 强大的内建同步机制:测试会在与UI进行交互前自动等待动画、网络请求等事件。这样,咱们就能够更加轻松地编写测试了(无需睡眠,也没必要再等待了),同时维护起来也更加容易(很是直观,整个测试看起来就是一系列描述而已)。通常来讲,你无需考虑同步性,由于EarlGrey会自动同步UI、网络请求、主Dispatch
    Queue以及主NSOperationQueue。为了支持在下一个UI交互发生前须要等待某个事件出现这种场景,EarlGrey提供了Synchronization APIs,你能够经过他们来控制EarlGrey的同步行为。你可使用这些APIs来加强测试的稳定性。框架

  • 可见性检测:全部的交互都发生在用户能够看到的元素上。好比说,尝试轻拍图片后面的按钮会致使测试马上失败。EarlGrey使用了屏幕截图区分比较(也叫作“screenshot diffs”)在与UI元素交互前肯定其可见性。这样,你就能够肯定对于EarlGrey与之交互的UI,用户能够看到而且也能与之交互。值得注意的是,进程外(即系统生成的)警告视图与其余会遮盖住UI的模态对话框会对这个过程产生干扰。工具

  • 灵活的设计:用于肯定元素选择、交互、断言与同步的组件在设计上就是可扩展的。轻拍与滑动是经过应用级的触摸事件来实现的,而不是使用元素级的事件处理器。在每一次UI交互前,EarlGrey都会断言交互的元素是可见的,而不只仅是存在于视图层次体系中就好了。EarlGrey的UI交互模拟了真实用户与应用UI交互的方式,能够帮助你找到并修复用户在使用应用时所遇到的一样的Bug。post

EarlGrey是个原生iOS UI自动化测试框架,能够帮助你编写出更加清晰、简明的测试。借助于EarlGrey框架,你可使用加强的同步特性。EarlGrey会自动与UI、网络请求及各类查询保持同步,同时在必要的状况下,你还能够手工实现自定义的定时器。EarlGrey的同步特性能够确保在执行动做前,UI会处于一种稳定的状态。这极大地加强了测试稳定性,使得测试变得高度可重复。EarlGrey与XCTest框架协同工做,而且集成到了Xcode的Test Navigator中,这样你就能够直接在Xcode中或是在命令行中(使用xcodebuild)运行测试了。单元测试

EarlGrey的用户文档位于EarlGrey/docs目录下。要想上手,请先查看一下EarlGrey的特性,看看其向后兼容性,而后经过测试目标来安装/运行EarlGrey。配置完毕后,请查看一下EarlGrey API,而后开始编写本身的测试。测试

下面来介绍一下如何安装EarlGrey,以及如何建立并运行第一个测试。动画

要想正常使用EarlGrey,请确保被测试的应用知足以下需求:ui

  • 正确的启动界面图片能够在全部支持的设备上出现(参见iOS Developer Library,Launch Files)。spa

  • 主UIApplicationDelegate实现了(UIWindow *)window属性(参见UIKit Framework Reference,window属性)。
    最后,请确保在测试目标上启动断言(即不要设置NS_BLOCK_ASSERTIONS)。能够经过两种方式将EarlGrey添加到Xcode项目中:使用CocoaPods,或是以框架的形式。

Cocoapods安装

对于EarlGrey来讲,咱们强烈推荐使用CocoaPods进行安装,这也是咱们认为的最佳方式。

第1步:建立一个测试目标。

EarlGrey须要一个测试目标。因为EarlGrey修改了测试目标的Scheme与Build阶段,所以咱们建议你为添加EarlGrey测试建立一个单独的测试目标。若是尚未建立,那么能够在Xcode的Project Navigator中选中项目,而后单击菜单中的Editor > Add Target...。

在Add Target窗口中,选择iOS -> Test -> iOS Unit Testing Bundle:

因为EarlGrey使用了Schemes,所以测试目标必需要有一个与之关联的Scheme。若是该Scheme是共享的就更好了。若是测试目标没有Scheme,那么请转向Manage Schemes,单击+按钮,而后从下拉菜单中选择目标。选择Shared选项,而后将Container设为待测试的应用。

值得注意的是,若是以前建立过Schemes,那么你须要运行一次才能让pod安装命令将其选中。若是在运行pod install以后,测试目标没有包含对Scheme与Build阶段的改变,那么请再次运行pod install。

第2步:添加EarlGrey并做为框架依赖

建立好测试目标后(好比说AppFunctionalTests),如今就须要将EarlGrey做为框架依赖添加进来了。要想作到这一点,请将EarlGrey做为测试依赖添加到Podfile中。因为EarlGrey必需要放在待测试的应用中,咱们须要对测试目标的Build Phases与Scheme进行一些修改。将configure_earlgrey_pods.rb文件添加到项目目录中(在这里运行pod install命令)。你须要在post_install钩子中调用这个脚本,使用项目名、测试目标名与xcscheme文件名。

第3步:运行pod install命令

当成功运行了pod install命令后,打开生成的工做空间,在Pods/directory中便可以找到安装好的EarlGrey。

建立与运行第一个测试

因为EarlGrey基于XCTest,所以在Xcode中建立第一个测试就像建立一个新的单元测试用例类同样简单。请不要将Unit Test Case Class与UI Test Case Class搞混了。UI Test Case Class使用了添加到XCTest中的新的UI Testing特性,它与EarlGrey并不兼容。
1456113505821.png

  1. Cmd+Click应用源文件所在的目录,而后选择New file...。这时会弹出一个对话框。

  2. 在弹出的对话框中选择Unit Test CaseClass,而后单击Next。在下一个界面中,输入测试用例的名字。对于该示例来讲,咱们输入MyFirstEarlGreyTest。

  3. 在下一个界面中,请确保测试与Unit Test目标关联起来。对于该示例来讲,目标就是SimpleAppTests。

  4. Xcode会为咱们建立一个新的测试用例,不过这个用例咱们用不上。咱们来修改其代码,只留下一个测试方法,并包含进EarlGrey框架。

  5. 如今来添加一个简单的EarlGrey断言,检查一个key window是否存在,并断言它会显示出来。下面就是最终的测试代码:

  6. 就是这些了!就像其余单元测试同样,该测试会显示在测试导航器中,所以能够单击run图标或是Cmd+clicking测试名,而后选择Test“testPresenceOfKeyWindow”来运行测试。因为这是个常规的单元测试,所以能够在测试与应用代码中打断点,也能够无缝使用内建工具。

适合谁用

​它基于XCTest(XCode自带的)作了扩展,你能够理解为它是一个更好用的XCtest。

这种侵入式的框架(须要在XCode集成或者命令行里面把测试bundle打到应用里面),意味着这款工具主要是面向有开发能力的工程师,此外,因为是白盒测试,因此主要仍是让开发者们测本身的APP。

所以,若是你是一个独立开发者,那么它对你而言会是一款很是棒的测试工具。

解决不了的问题

EarlGre不能代替基于真机的测试。也就是说APP在真实设备上的兼容性问题,没法经过软件模拟的方式暴露出来。若是你想要避免因硬件问题致使的用户流失,你仍是须要在几百台真实手机上对进行APP测试

当你须要在几百台手机上作测试时,自动化的真机测试可以快速帮你解决战斗。因此,若是你是一名不具有写代码能力的测试工程师,公司又刚好须要你作大规模的真机测试,那么TestBird所提供的兼容性测试会更加适合你。

目前Testbird为你们提供免费的兼容性测试体验Testbird官方注册地址

相关文章
相关标签/搜索