2

移动互联网在改变我们生活的同时,给各行各业都带来了翻天覆地的变化,就拿移动应用开发来说,传统软件的迭代周期往往以年、月计,而到了手机上,几乎每周都有新版本上线,一些“勤快”的应用甚至三五天就更新一个版本。如此频繁的迭代速度给软件测试带来了前所未有的压力,如何保障应用的发布质量,是每一个移动产品开发团队必须面对的,于是移动自动化测试就成了解决敏捷开发和持续交付的最佳方案。

今天,云智慧的iOS开发工程师龚彪同学就为您分享他在移动开发过程中积累的移动自动化测试经验心得。

自动化测试是什么
自动化测试是把以人为驱动的测试行为改成机器执行,通过精心设计的测试用例,由机器按照测试用例的执行步骤对应用进行自动操作,然后输出结果,由测试人员进行比较。自动化测试可以极大的节省人力、时间和硬件资源,提高测试效率。

对于功能比较完整和成熟的软件,每发布一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,而这部分功能就最适合于自动化测试。

移动自动化测试的优点
1.对程序员来说,在提交代码之前,可以先进行回归测试,这样能提高代码质量,加快代码上线速度。

2.自动化测试能够很方便的自动完成安装/卸载、启动/运行、UI适配等枯燥的手工测试环节,节省很多时间,在准确编写测试脚本的前提下,能够帮助测试人员完成更多要求。

3.脚本和框架一般在iOS和Android平台是通用的,同一测试脚本适用于所有Android机型,可快速完成兼容性测试。

4.可以模拟产生数据。通过一些重复的操作,产生一些简单的数据。能够保存截图、输出log、输出错误信息。

5.可以长时间运行,并保证数据的正确性,避免人工测试的人为错误。

6.Android可以通过局域网,多设备多脚本多case连续测试。

7.可以借助透视宝对应用性能进行全面诊断。比如,用户提供安装有透视宝SDK的apk/ipa的安装包,就可以对用户的APP进行一次整体测试,产生一份包括崩溃、内存泄漏、网络监控和UI性能测试的具有洞察力的详细报告。目前云智慧的很多客户在产品发布之前都要先绑定透视宝SDK,之后在testin、百度云测、腾讯优测等平台进行测试之后才评估是否使用。

8.不需要重新编译APP。

移动自动化测试的缺点
1.需要借助Appium工具来录制脚本,而Appium是第三方的开源工具,需要布置环境。

2.可通过Xcode自带的Instruments或者Android自带的UIAutomator工具录制脚本,要会简单使用xcode和eclipse。

3.录制成功的脚本代码需要重新编写,来输出结果、进行截图、输出错误信息等,需要会编写简单的python或者JS脚本。

4.每次要测试一个新app的时候,都要重新设计测试用例,重新设计输出规范和记录内容,重新生成标准化的测试报告。

5.需要对结果进行逻辑处理,需要人工比较、分析。

6.没办法手机录脚本,需要配合客户端。

7.框架维护不易,复用率低。

8.当然必须是debug包。

手机自动化测试原理
手机自动化测试的原理为PC上的控制端(测试工具)与手机上的agent端,通过串口、USB或无线的方式实现PC与手机终端相连,然后应用测试工具向手机发送请求/命令,手机端收到后交给agent端解析, agent将解析出的命令下发给手机的对应功能模块,调用功能模块模拟操作。完成操作后,手机会返回结果,agent抓取这些信息后传回PC端,这样就完成了一个完整的手机端自动化测试。

自动化测试的流程是:搭建框架→设计测试用例→编写脚本→进行测试→得出结果。

自动化测试脚本是采用录制的机制,就是记录手工操作的键盘信息或者记录XPath信息,Xcode调用的一定是Instruments,Android基本上是UIAutomator。Instruments的功能本身也很强大,可以生成脚本,监测APP性能,比如耗电量、CPU使用率、内存使用率和流量监测。

自动化测试框架的搭建方法是通用的,需要针对不同的APP,不同的场景设计不同的测试框架才能进行自动化测试。

手机自动化测试常用技术方案
1.Appium:这是最近非常热门的开源框架,同时支持Android和iOS,iOS部分封装了Instruments,Android部分封装了UIAutomator,支持多挣语言来编写测试脚本。

UiAutomator:UiAutomator是Google仿照微软Uiautomation提供的一套自动化框架,基于Android AccessilibilityService提供的自动化测试框架,顾名思义,主要用于UI自动化测试,提供仿真单机、滑动、文本输入等事件,比如把一组反复动作通过UiAutomator实现,提高测试效率。在UiAutomator中,每一个UI控件都是一个UIObject对象。它支持所有的Android事件操作,通过模拟器也能运行测试,很多自动化测试脚本编写客户端都封装了UiAutomator,包括百度云测、腾讯优测等。UiAutomator是Google仿照微软Uiautomation提供的一套自动化框架,基于Android AccessilibilityService提供。
其应用方式有以下几种,一种是UiAutomatorView+monkey,另一种是直接调用UiAutomator API。第一种方法和hierachyview+monkey差不多,其区别是:UiAutomatorView通过ADB向设备侧发送一个dump命令,而不是建立一个socket,下载一个包含当前界面控件布局信息的xml文件。相比较hierachyview下载的内容而言,该文件小很多。因此,从效率上讲,这种方法比第一种应用模式快很多。

第二种方法则是直接调用UiAutomator框架对外提供的API,主要有UiDevice、UiSelector、UiObject等。其原理与第一种方式,即HierachyView+Monkey,差不多。其过程大致是:首先,UiAutomator测试框架通过Accessibilityservice,获取当前窗口的控件层次关系及属性信息,并查找到目标控件。若是点击事件,则计算出该控件的中心点坐标。其次,UiAutomator通过测试框架,注入用户事件(点击、输入类操作),从而实现模拟人的操作。

UiAutomator对外提供UiAutomatorTestCase、UiDevice、UiSelector、UiObject、UiCollection、UiScrollable等类,其作用如下:

● UiAutomatorTestCase :继承自Junit TestCase (Junit),对外提供setup、teardown等,以便初始化用例、清除环境等。

● UiDevice:此类主要包含了获取设备状态信息,和模拟用户至于设备的操作两类API。UiSelector,主要是通过一定查询方式,定位到所要操作的UI元素。

● UiObject:UiObject可代表页面的任意元素,它的各种属性定位通常通过UiSelector来完成。

● UiCollection:UiCollection一般与UiSelector连用,如它的构造函数也要求提供Uiselector: UiCollection(UiSelector selector)。它的API较少,主要用以从Uiselector筛选出的元素集中挑出所要的元素:getChildByDescription(), getChildByInstance(), getChildByText() ,以及统计元素集的个数getChildCount()。

● UiScrollable:UiScrollable 用来表示可以滑动的界面元素,其继承关系为UiObject -> UiCollection ->UiScrollable。

3.Instruments是Xcode自带的性能优化工具,可以编写js脚本,监控CPU使用率、内存使用、流量和耗电。一个Instruments只能启动一台设备,不过可以开启多个instruments,所以理论上一台Mac电脑能够同时测试多台设备。

4.举例:

1)appium录制的脚本
脚本截图代码:
wd.get_screenshot_as_file(‘/users/billgong/Desktop/IMG/.png’)
输出log:
import sys
f = file(r’/users/billgong/Desktop/LOG/1.log’,’a’)
try:…
result = ‘1’ + ’n’
f.write(result)
f.flush()
脚本截图:

图片描述

2)Xcode Instruments

脚本录制工具 :
图片描述

结语
从TestIn到百度云测,腾讯优测、阿里云测,各大互联网公司纷纷布局自动化测试市场中并不断完善自己的产品,说明自动化测试已经是越来越流行的测试方式。如果没有自动化测试,敏捷开发和DevOps就是空谈,但这种测试方式别看实现起来简单,真正掌握和用好却并不容易,需要测试人员能够自己设计测试用例,还需要一点编写脚本的能力。


CloudwiseAPM
238 声望39 粉丝