《51测试天地》—腾讯WeTest教你玩转手游测试
 
   
解放程序猿(媛)的双手 ——iOS UI自动化测试
 
  首页 1 尾页
 

  一、前言
  随着移动互联网时代的蓬勃发展,移动终端的自动化测试也在业界日益活跃,总体来看在Android平台上的自动化工具和实践比较多,但是说到iOS平台无论从自动化工具的数量还是质量上就陡降了。究其原因,无外乎是iOS系统的封闭性,加上相对Android用户的数量少,导致对这个平台系统的自动化进展缓慢,据笔者了解到的情况,很多iOS平台的测试人员还处于纯手工测试模式,自动化程度和Android平台无法相论,更别提和PC端相比了。
  然而越是困难的事,越是研究的少,就越具有挑战性。有挑战性的事大多又会带来不菲的收益,如果能在iOS上做出大规模可持续运行的自动化测试,那么对iOS的测试演进无疑是一次大的推动。
  手机QQ浏览器(iPhone)测试小组的同学在比对和实践了业界已有的iOS自动化工具,总结提炼了对比,如下表所示。
  表中没有列的内容是稳定性,实践中看来上述除UITesting之外的工具稳定性都相对一般,会出现自身框架导致的各种闪退,以及性能越来越差的问题。
  因此iOS平台上除了Monkey测试采用了自动化方式,以及部分性能测试轻度使用了一些自动化工具,大部分功能测试还是依赖于人的操作。移动APP更多的场景是面向用户,面向界面操作,UI测试就非常直观和重要,因此我们致力于寻找一种稳定性高,且易于掌握的自动化测试工具。
  二、久旱逢甘霖
  苹果公司在2015年推出的Xcode7中引入了UI Testing工具,该工具配置相对简单,还支持录制回放功能,运行速度很快,测试代码也可以调试,使用OC作为脚本测试语言兼容性较好,支持UIWebView,支持截图功能,最重要的是稳定性高。
  其实选用一个工具,最看重的就是稳定性和可调试。可调试性不必多说,就是刚需。而很多工具没有被很好的应用就是因为稳定性较差,UI Testing是苹果开发的,和被测程序的兼容性好,实践证明,确实能够彻夜稳定运行脚本,未见因工具自身原因导致的闪退。性能方面也影响较小,后期发现一些截图操作会有一点点影响速度,但是整体运行还算良好,没有明显变差。
  在大量工具都无法在iOS上施展拳脚时,UI testing姗姗而来,带给我们惊喜和希望。
  三、必经之路
  工具是好工具,但是如果想在项目中实际应用起来,还是会遇到许多问题和困难,这里给大家分享下我们的磨合期。
  第一个挑战:门槛要低
  要使用这个工具,扑面而来的问题就是怎样快速上手,也即学习成本和投入产出比的问题。地球人都知道OC语言并不是一种容易快速上手学习的语言,加上底层是XCTest接口,录制后能看到的实现就是下图这样的,看着很凌乱有没有?
  因此我们需要做的就是进行封装。封装包含接口封装和特殊控件的封装两部分。
  接口封装有两层,一层主要处理弹窗,异常,超时等待,手势处理等操作,二层是把控件类型和手势合二为一,提供脚本使用。实际脚本编写者就可以直接调用,命名和使用方式都具备高可读性和可用性,另一方面底层的接口修改,不会影响到上层的函数表现形式,这对自动化用例编者来说也降低了门槛,不必关注底层接口的细节变动。
  例如上图所示,浏览器多窗口界面向左滑动就可以删除页面,可以选择删除第一个页面。将这个操作封装起来如下图所示,后续使用即可直接调用该函数,只需传入对应参数即可。
  特殊控件的封装。一般应用于控件无法寻找到对应的唯一标识,或者层级比较多的情况下,通过录制的方式,读取控件属性,将其打包成一个整体,再后续使用时可以直接调用。
  例如上图所示是浏览器多窗口的管理界面,右下角有个返回按钮,通过查看xml结构无法获知唯一标识,通过录制的方式确定控件结构。对录制的内容进行加工处理后,封装为特殊控件,如下图所示,存放于指定文件内,方便后续使用。
  使用中,可以直接调用已经封装好的接口,每个接口都包含一个或者多个固定参数,和一个可变参数。固定参数按照所给出的类型传值就可以了,而可变参数,需要我们按照一定的格式进行参数传递。举例可变参数格式:VariableParameter:@" StepName=切换小说书架为宫格模式&LogLevel=WARN",其中多个参数使用&符号连接,每一个单独的参数使用KEY=VALUE的形式。
  第二个挑战:灵活编译
  在自动化测试中经常遇到的问题是配置环境和单例运行的问题。
  首先环境配置会不会很复杂,很大程度上制约着使用者的使用频率。相比较APPium的复杂设置,UI testing的配置就简单明了多了。
  (1)添加服务端配置。需要将UITestServer.xcodeproj添加到目标工程的thridparty文件夹下面。UITestServer.xcodeproj是自研服务器,主要功能是:嵌入被测试APP中,实现端口监听,服务开启,消息获取,消息处理,各种事件功能(截屏,获取被测试APP日志信息,获取内存,cpu,网速,流量等功能),还可以扩展。
  (2)配置被测APP。需要在被测APP的主加载函数中加入监听服务端口。为了不影响发布版本的使用,我们采用DEBUG模式。
  (3)配置QBUITests(名字自定义)组件部分,该部分主要是我们的自动化测试框架部分,包括各种自动化组件,自动化脚本,配置信息等。需要将自研文件夹UITestUtils,SystemResources,SpecialElement,ScreenShot,Log,ScriptInterface全部拖动到QBUITests Target下面。
  经过上面的配置,框架配置基本完成。
  接下来看单例运行问题,如下图所示是小说模块的自动化脚本头部,包含开头的初始化操作,直接可以运行单例"test311001",也可以进行正常的调试,也可以指定运行全部用例或者部分脚本。
......
(下载专刊即可查看全文)
  本文收录于《测试专刊-腾讯TMQ移动测试方法集锦》。
  版权声明:本文出自《测试专刊-腾讯TMQ移动测试方法集锦》。51Testing软件测试网及相关内容提供者腾讯TMQ团队拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

 
1  
 

 

51Testing软件测试网 | 快捷面板 | 站点地图 | 联系我们 | 广告服务 |

建议使用IE 5.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术有限公司 Copyright@51testing.com 2003-2016, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com   业务联系:service@51testing.com  021-64471599-8017