文档章节

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

aabbc
 aabbc
发布于 2016/02/29 17:42
字数 2222
阅读 57
收藏 1

 


 

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


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。


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


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


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


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


· 正确的启动界面图片可以在所有支持的设备上出现(参见iOS Developer Library,Launch Files)。

· 主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并不兼容。




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

2. 在弹出的对话框中选择Unit Test Case Class,然后单击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所提供的APP测试会更加适合你。

 




© 著作权归作者所有

aabbc
粉丝 2
博文 30
码字总数 11989
作品 0
普陀
私信 提问
Google 开源 iOS 应用测试工具:EarlGrey

Google于今日宣布了开源的EarlGrey软件,以便开发者更轻松地构建和运行“面向iOS apps源码”的用户界面测试(是的,你没看错!)当前托管于GitHub上、遵从开源Apache授权的EarlGrey,由Objec...

oschina
2016/02/18
4.2K
3
Google推出iOS功能性UI测试框架EarlGrey

经过了一段时间的酝酿后,Google很高兴地宣布了EarlGrey,一款针对于iOS的功能性UI测试框架。诸如YouTube、Google Calendar、Google Photos、Google Translate、Google Play Music等多款Goo...

小A爱开发
2016/02/25
30
0
超好用!5款开源的移动自动化测试工具

如今,移动应用在企业的地位越来越重要,消费者对移动设备的要求也越来越高。为适应这一需求,测试团队必须在移动设备推出市场之前,对其性能进行一系列的评估和测试。然而,这是一个既耗时又...

达尔文
2016/11/11
5.4K
2
转:一套代码iOS、Android两端运行,Google Flutter意味着什么?

原文:https://www.toutiao.com/a6569388465538990600/?ttfrom=weixin&utmcampaign=clientshare×tamp=1529580533&app=newsarticle&utmsource=weixin&iid=35476649324&utmmedium=toutiao......

鸿蒙无上至尊
2018/06/22
0
0
谷歌Flutter跨平台应用开发SDK迎来首个发行预览版本

谷歌Flutter跨平台应用开发SDK迎来首个发行预览版本 2018-06-22 12:26编辑: 枣泥布丁分类:程序人生来源:程序师 跨平台Google Flutter预览版本 招聘信息: 图像处理及模式识别工程师 C/C+...

枣泥布丁
2018/06/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

读书replay《maven实战》.1.20190526

前情提要 maven这个工具用了好久了,但是一直都用的迷迷糊糊的,没有对它进行过系统性的学习,只是知道一些常用的功能怎么实现,所以20190516这一天我从JD购买了徐晓斌老师所著的《maven实战...

wanxiangming
28分钟前
0
0
真实项目案例实战——【状态设计模式】使用场景

什么是状态模式 状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。 状态模式应用场景 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根...

须臾之余
35分钟前
0
0
Java 实现把字符串转换成整数【底层实现】

https://blog.csdn.net/zl18310999566/article/details/80263396

qimh
38分钟前
0
0
IDEA的debugger

1、win下节省内存空间 3、条件断点

一只小青蛙
49分钟前
3
0
炸!亿级数据DB秒级平滑扩容

一步一步,娓娓道来。 一般来说,并发量大,吞吐量大的互联网分层架构是怎么样的? 数据库上层都有一个微服务,服务层记录“业务库”与“数据库实例配置”的映射关系,通过数据库连接池向数据...

编程SHA
54分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部