本文内容:Android自动化测试框架初探

版权声明:本文为原创文章,未经允许不得转载

博客地址:http://blog.csdn.net/kevindgk

初步了解

Android自动化测试框架从2007年发展至今时今日日趋成熟,从早期官方提供的半自动化工具逐步演变到现在的全自动化框架,包括支持跨应用、WebView等,其功能越来越强大,并融合库思想、数据驱动、模块化、函数桩等先进的自动化测试思想和理念,使得测试更加方便。尤其是在使用敏捷开发的团队中,自动化测试显得尤为重要。

Android自动化测试框架,从狭义上讲就是通常提起的自动化测试工具,比如Robotium、Appium、Selenium等,广义上除了这些自动化测试工具,还有测试管理平台,包含测试中对测试用例的管理、报告输出、数据统一存储等综合管理平台。

注意,本文档中指的自动化测试,一般值得均是Android端的自动化测试。

什么是自动化测试

自动化测试是把以人为驱动的测试行为转化为机器执 行的一种过程。通常,在设计了测试用例并通过评审之后,由测 试人员根据测试用例中描述的规程一步步执行测试,得到实际结 果与期望结果的比较。在此过程中,为了节省人力、时间或硬件 资源,提高测试效率,便引入了自动化测试的概念。

本质:编程测试,即 编写一个程序测试另一个程序。

过程:录制脚本>修改录制脚本>回放脚本>查看报告。

小编作为一名Android开发,更关心的是自动化测试框架能够给我们开发人员以及整个项目带来什么益处。

优点

  • 对项目:节省了人力、物力以及时间资源,极大地提高了测试的效率;
  • 对开发人员:更加深入的了解整个项目的业务逻辑以及测试的流程,有利于开发以及减少bug的产生;
  • 对测试人员:可以了解整个项目的代码,更好的完成白盒以及黑盒测试,同时也能提高自身的编码能力。

缺点

  • 测试脚本不稳定、回放经常出错
  • UI变化时,脚本批量Fail,需要修改大量脚本
  • 测试脚本的可复用性和可维护性以及可读性极差
  • 网络环境差时,由于等待时间问题,脚本批量Fail
  • 环境配置信息变化频繁,需要频繁修改自动化脚本
  • 无法对现有的工具进行功能扩展
  • 工具生成的测试报告不符合公司报告需求

前提条件

  • 软件需求变动不频繁
  • 项目周期足够长
  • 自动化测试脚本可重复使用

所以说,我们不能够为了使用自动化测试框架而强行使用,也不能由于对自动化测试的不了解而趋之若鹜。我们应该根据自己的项目情况,在合适的开发阶段,选择合适的自动化测试工具,来帮助提高整个团队的开发效率。作为一个leader,也会会比较关心在团队中引入自动化测试的优势和缺点,但是作为一个敲代码的同学来讲,应该更喜欢贴一万行代码直接将核心知识,接下来就是小编对目前了解到的Android自动化测试框架的整理。

应用场景

应用场景测试内容特点
性能测试流畅度、速度、流量、耗电量、内存、CPU等模拟正常、峰值和异常情况,监控应用的性能数据。测试重复性强,指标固定,并且需要测试数据的横向和纵向对比,形成庞大的测试矩阵,非常适合使用自动化测试
稳定性测试ANR、Crash、闪退等模拟用户的长时间操作,测试应用的稳定性,通常使用Monkey做测试
功能测试业务需求测试、回归测试等由于目前产品快速迭代,造成了脚本实现和维护等成本大,需要不断的磨合,常常需要结合使用多种测试工具进行开发,开发难度较大
兼容性测试适配不同的手机常用方法就是使用业界比较成熟的测试平台:阿里云测、腾讯优测、百度MTC、Testin等
接口测试重要的API测试和PC端的接口测试思路一样,通过脚本去遍历所有重要的API,非常适合使用自动化测试去实现,脚本相对稳定而且效果明显
安全测试静态扫描代码、权限等发现安全隐患目前各大平台提供的安全测试都是一些基本的检测,远远比不上专门的安全测试
单元测试Android Junit开发同学自行完成,作用并不是很大,可以直接参考robotium的白盒测试
线上监控对线上数据监控不属于传统的自动化测试范畴,主要是对线上的数据监控,然后利用数据分析发现问题,可以非常直接的提升产品的质量

当逐渐深入的了解自动化测试,越发觉得自动化测试包含的内容十分庞大,涉及到前端、后台、UI等各个部分,而且需要掌握的知识点很多,需要使用的工具很多,需要学习的语言也很多,另人望而生畏。然后,随着慢慢的整理和分析,才对整个自动化测试有了一个初步的完整性的了解。

基本原理

通用的基础框架一般都会包含三个核心部分:

  • 动作执行:即通过坐标/ID等获取界面控件,并模拟用户端事件;
  • 结果判断:对脚本中的结果进行判断并输出测试结果;
  • 报告展示:对测试结果进行统计分析,然后输出适合项目的HTML报告。

目前主流的测试工具简介

下面的介绍都是截至到当前时间,在实际开发中比较常用的自动化测试工具,但是由于近几年自动化测试发展十分迅速,很有可能几个月或者几年之后,会使用了新的技术,或者下面工具的特点也会做出一些改变,所以接下来的介绍目的就是让大家有个初步的了解。各个工具的使用方式以及优缺点还需要去各自的官方网站上进行查看,小编对于新的技术或者工具的首要态度就是一切依官方为准!

1.功能测试

Web端:

  • Selenium: Java/Python/Ruby/C#

Android端:

  • Robotium: Java
  • Appium: Java/Python/Ruby/C#
  • UIAutomator: Java,google官方
  • Monkeytalk: Java

IOS:

  • UIAutomation:JS,苹果
  • Appium
  • Monkeytalk

。。。

2.性能测试

Android端:

  • Monkey

Web端:

  • HP Loadrunner: JS/C
  • Apache Jmeter: Java

3.安全测试

  • IBM appscan
  • Fiddler

Android端自动化测试工具对比

1.Monkey

Android系统自带的稳定性测试的小工具,主要通过adb命令来启动monkey测试,monkey在运行时会根据命令行参数的配置,生成伪随机的事件流,并在Android设备上执行该事件流,同时对测试系统进行检测。

优点

  • 基本使用十分方便

缺点

  • 往往不能满足测试需求,需要进行二次开发,但是二次开发的难度一般都比较大。

2.UIAutomator

Android官方支持的自动化测试框架,>=API 17,Android 4.2

语言:Java

优点

  • 官方支持更新:Android原生支持,测试以来环境少,创建方便
  • 层次接口明晰:框架层析结果分明,api明析,上手成本很低
  • 基于控件交互:支持通过ID获取控件进行交互(>=API 18,Android 4.3)
  • 不依赖于源码:黑盒测试
  • 事件等待优秀:在事件等待方面接口丰富,控制灵活精确,表现优秀
  • 支持跨进程测试:Rom层级的测试,棒棒哒~

缺点

  • 仅支持Native应用,不支持Hybrid应用(混合应用,即包含WebView的H5网页的应用),希望后续官方能够支持

3.Robotium

基于Instrumentation

语言:Java

优点

  • 支持Native应用和Hybrid应用;
  • 基于Instrumentation,测试代码运行与被测应用所在的进程,控件识别与模拟UI时间都可以快速执行;
  • 支持白盒/黑盒测试;
  • 可以通过Maven、Gradle、Ant来运行测试用力,所以很好的作为持续集成的一部分。

缺点

  • 由于基于Instrumentation的事件发送,所以无法跨应用。
  • 代码运行在被测试进程,可能影响被测进程的内存、CPU占用,对性能检测或稍有误差。

4.Appium

Android:

  • 版本>=4.2:官方的UIAutomator
  • 版本>=2.3:Selendroid,基于Android的Instrumentation框架

IOS:

  • UIAutomation:ios系统自带的UI自动化测试工具

语言:Java/Python/Ruby/C#

优点

  • 支持多种应用程序:Native App、Hybrid App、Web App
  • 支持多种脚本
  • 支持应用之间的跳转的测试
  • 跨平台:可以使用同一个API在Android和IOS上都可以运行的脚本

缺点

  • 必须连接电脑,遇到脱机执行的场景往往不能满足需求
  • 只能用于UI自动化测试,很多情况下测试验证只能通过界面来进行

只有在各个工具都使用过之后,才能真正体会到他们的优缺点,基本上都是对google官方的工具进行二次封装,使得使用起来更加便捷,所以我们需要对底层的几种框架有一个基本的了解,那么再学类似的工具就十分简单了。

云测平台

随着性能测试、兼容性测试的需求日益增加,越来越多测厂商开始推广云测试平台,比如:

这些云测试平台大同小异,与Google的Cloud Test Lab功能基本相同,包含:

a.兼容性测试:通过大量真机覆盖大部分机型

b.压力测试:通过脚本实现压力测试

c.缺陷分析:通过代码静态扫描和测试中发生的ANR、Crash等提供应用的缺陷分析

d.性能测试:在测试中监控应用性能等数据

e.远程真机租用:用户可以远程访问DeviceLab中的真机,并通过远程控制的方式进行使用。

使用云测平台在一定程度上解决了很多公司的测试问题,特别是一些付费的服务,可以进行一些”深度测试和分析”,让公司享受到更好的测试服务。例如可以帮助测试人员进行分析、录制脚本和回放等功能,对于一些初创企业来说,目前算是一种比较好的测试与优化手段。

总结

关键点:可持续集成

难点:对自动化框架的搭建、工具的二次开发

其实自动化框架只是日常测试中的一个辅助手段,说白了它就是利用自动化测试框架以及工具能理解的程序去代替人去完成测试,通过比较执行的结果来判断测试是否通过然后生成报告。它的又是很明显,无论多么复杂的操作,即使反复执行成千上万遍,只要程序没有问题,它都会快速的执行完毕,比手工要轻松的多;但劣势也很明显,最大的缺点就是工具是人工思考后的一个固话程序,它不会变通,是按照人的旨意来完成相应的任务。所以测试人员对工具的应用和改造能力显得尤为重要,通过对被测应用的深入认识和思考,转化成可以实现的测试需求,再配合这些工具和写代码的同事进行封装,就可以完成测试中各个领域的人工代替工作。

引用

1.《腾讯Android自动化测试实战》 丁入敏 盛娟等著 机械工业出版社

2.《深入理解Android自动化测试》 许奔著

3.安卓APP自动化测试(kevin公开课专辑)

4.《Android 群英传 之 神兵利器》 徐宜生著

联系方式

邮箱:815852777@qq.com

微信:

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐