资讯专栏INFORMATION COLUMN

如何通过自动化测试 应对App的频繁迭代

YanceyOfficial / 2397人阅读

摘要:自动化测试的流程是搭建框架设计测试用例编写脚本进行测试得出结果。它支持所有的事件操作,通过模拟器也能运行测试,很多自动化测试脚本编写客户端都封装了,包括百度云测腾讯优测等。

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

今天,云智慧的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就是空谈,但这种测试方式别看实现起来简单,真正掌握和用好却并不容易,需要测试人员能够自己设计测试用例,还需要一点编写脚本的能力。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16323.html

相关文章

  • 干货 | 金融级互联网产品持续交付挑战与应对

    摘要:小蚂蚁说在金融级互联网产品持续交付方面,蚂蚁金服积累了丰富的经验和最佳工程实践。金融互联网产品最核心的两个关键词,第一个就是金融。 小蚂蚁说:在金融级互联网产品持续交付方面,蚂蚁金服积累了丰富的经验和最佳工程实践。在2018年ATEC技术探索大会上,蚂蚁金服解决方案架构师吕中邦(凤启)从行业背景出发,分析了金融级互联网产品持续交付的核心挑战,从更快更早地交付价值和守住技术风险底线保障交...

    Lorry_Lu 评论0 收藏0
  • 如何应对移动测试五大挑战?

    摘要:设备碎片化系统平台多样化移动测试矩阵最难的地方或许就是设备碎片化了。如下图由于移动应用可能会被部署到各种不同设备上,而这些设备可能会存在各种各样的兼容性问题,所以说移动应用测试面临巨大的挑战。我们应该构建一种能实现最大覆盖率的测试环境。 移动设备正在爆炸式的增长,手机已经成为最主要的联系方式,每天都会有数千款app产生。移动化已经不止局限在电话和平板电脑,汽车、可穿戴设备、和家用设备的...

    henry14 评论0 收藏0
  • AppHost:大前端融合下 Hybrid 开发解决方案

    摘要:接口管理独立于的版本号,使用特性嗅探实现新旧的兼容,简单直观。其中在网易有钱上使用了年多,支持了网易有钱的不断增长的业务需求,期间解决了很多遇到的通有的问题。目前还没有在线上系统中使用,目前正逐步将整体接入网易严选和网易推手。 showImg(https://upload-images.jianshu.io/upload_images/277783-33c33da3e99a070d.p...

    XBaron 评论0 收藏0
  • AppHost:大前端融合下 Hybrid 开发解决方案

    摘要:接口管理独立于的版本号,使用特性嗅探实现新旧的兼容,简单直观。其中在网易有钱上使用了年多,支持了网易有钱的不断增长的业务需求,期间解决了很多遇到的通有的问题。目前还没有在线上系统中使用,目前正逐步将整体接入网易严选和网易推手。 showImg(https://upload-images.jianshu.io/upload_images/277783-33c33da3e99a070d.p...

    shleyZ 评论0 收藏0
  • 必看!互联网开发模式经验之谈

    摘要:架构设计实体化单元测试敏捷开发讲究要快速的修改代码,我们往往会发现,代码修改的越频繁,越多,这似乎是一个无法解决的矛盾。 本文由云+社区发表,作者:韩伟 互联网开发的核心问题 当我1999年进入互联网行业工作的时候,华为刚刚通过了著名的CMM认证。当时作为一个小程序员,非常向往业界经典的软件开发模式。因为看上去,如果企业实行了CMM,我们程序员就不用再天天为了老板一个拍脑袋的主意而加班...

    宠来也 评论0 收藏0

发表评论

0条评论

YanceyOfficial

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<