1.1 androidimages.china-pub.com/ebook4980001-4985000/4981485/ch01.pdf · 2016. 9. 29. ·...
TRANSCRIPT
第 1 章
概 述
在展开各章节简介之前,本章先带读者了解一下 Android 自动化测试框架的大体历
史以及框架的演进过程。Android 自动化测试框架和工具从 2009 年发展至今日趋成熟,
从早期官方提供的半自动化演进到全自动化框架,包括支持跨应用、WebView 等,其功
能越来越强大,并融合库思想、数据驱动、模块化、函数桩等先进的自动化测试思想和
理念,Android 测试起来越便捷。本章主要介绍 Android App 自动化框架的历史及热点
问题。
1.1 Android 自动化测试框架概述
2007 年 Android 开源时,Monkey、Instrumentation 和 MonkeyRunner 这 3 个测试框架,
是跟 Android 源码一起发布的,这也是最早可用的自动化测试框架,那几年大家基本都是
用这些框架来开展自动化相关测试工作的。2010 年,第一个第三方的测试工具 Robotium
(基于 Instrumentation)发布了,不少测试人员就转用这个框架,Robotium 社区逐步发展
起来。图 1-1 所示为 Robotium 热度随时间变化的趋势。
2010 年还有一个自动化测试框架 Robolectric 开源了,主要支持单元测试;Robolectric
允许用户做大部分真实设备上可以做的事情,且可以在常规的 JVM 持续集成环境中运行,
不需要通过模拟器,因此可以摆脱模拟器启动慢的问题。
Chapter 1
2 腾讯 Android 自动化测试实战
2015 年 7 月
Robotium: 52
201520132011200920072005
图 1-1 Robotium 热度随时间变化的趋势
注:引用自 https://www.google.com/trends/explore#q=robotium
2011 年新发布的 Android SDK 包含了 chimpchat,可以通过 Java 来调用 Monkey,也
可以用 Java 语言实现类似 MonkeyRunner 功能(MonkeyRunner 之前只支持 Python)。
2013 年则是一个 Android 自动化测试框架爆发年,Selendroid、Espresso、Calabash、
Appium 等框架都是在这一年发布或者开源的。其中,Appium 整合 Selendroid 以及 UI
Automator 等框架的优点,使用 Selenium 的 WebDriver JSON 协议,使 WebDriver 用户使
用起来非常方便。自 2013 年以来,Appium 发展非常迅速(不过基本上是印度的同学在搜
索)。图 1-2 所示为 Appium 热度随时间变化的趋势。
201520132011200920072005
图 1-2 Appium 热度随时间变化的趋势
注:引用自 https://www.google.com/trends/explore#q=Appium
按照时间线,把上面介绍的自动化测试框架梳理一下,如图 1-3 所示。
第 1 章 概 述 3
当然国内也有不少团队或者个人开发自动化测试框架并开源,例如百度的 Café
(https://github.com/BaiduQA/Cafe),阿里巴巴的两个自动化测试框架 Athrun)http://
code.taobao.org/svn/athrun)、Macaca(http://macacajs.github.io/macaca/)。腾讯内部也开
发了 Android 自动化框架,不过暂时没有开源。相信国内其他公司也在开发相关自动化
框架,有些公司基于已有的开源框架二次开发定制适合自己项目的自动化框架,可能暂
时也没有开源。
图 1-3 Android 自动化测试框架时间线
注:上面提到的是相对有一定使用人数的自动化测试框架,除此之外,业界还有不少其他测试框架,如
MonkeyTalk、RoboSpock、NativeDriver 等。
上面简单介绍了 Android 自动化测试框架的历史(时间线展示)。Android 自动化测试
里面还涉及到一个签名的问题(Instrumentation 的限制),我们按照重签名的维度重新划分
一下,方便读者做自动化测试框架的选型。图 1-4 所示为 Android 自动化测试框架图谱,
仅供参考。
4 腾讯 Android 自动化测试实战
And
roid
自动
化测
试框
架图
谱
图1-
4 A
ndro
id自
动化
测试
框架
图谱
注:
App
ium
不需
要更
改被
测A
pp签
名;
Hyb
rid:
混合
And
roid
原生
控件
以及
Web
view
控件
;
Nat
ive:
纯A
ndro
id原
生控
件。
第 1 章 概 述 5
1.2 本书内容概述
本书主要介绍 Android 自动化测试相关内容,分为以下两大部分。
第一部分介绍业界流行的 Android 自动化框架的基础知识,聚焦工具框架的原理和基
础 API 使用,以及框架的二次开发(根据具体项目做相应修改),分享实践过程中的一些共
性问题。这部分内容需要读者有基本编程能力(主要是 Java 方面的编程基础),如果读者已
经具有这方面的能力(比如独立按 Android 开发者官网文档搭建相关 HelloWorld 的工程),
那就更容易理解书本的内容;同时可以重点关注如何进行二次开发,以及如何应用于实际
项目。
第二部分通过一些实际案例来讲解这些自动化框架的应用,更强调系统性分析设计,
包括需求的分析、工具选型、代码覆盖率的应用,以及覆盖功能测试以及性能测试的具体
实战等。这部分对读者的技术能力要求相对更高一些,涉及的知识点会多一些。当然如果
有不太明白的地方,欢迎与各章节的作者进行交流。
第一部分 Android 自动化测试基础篇。
本书第一部分内容就是从自动化框架图谱中选择业界相对流行的自动化测试框架展
开介绍,根据 Google 上这些自动化测试框架搜索量以及我们了解到的各互联网公司的自
动化框架使用情况,我们选择有代表性的 4 个框架(Monkey、Robtotium、UI Automator)
Appium)分别进行介绍。第 1 章也即本章,所以从第 2 章开始简介。
第 2 章自动化测试框架及应用领域综述:本章通过一个浅显易懂的 Android 自动化测
试案例进行详细讲解,提炼出通用的自动化测试框架的原型—“动作执行 / 结果判断 / 报
告展示”,最后介绍自动化测试的各种应用场景,方便读者更好地应用自动化测试。
第 3 章 Robotium 框架工作原理及实践:本章要求读者有一定的 Robotium 基础,可以
先到 Robotium 官网下载相关 Robotium 的基础 Demo 练习。第一节先简单介绍 Robotium
的特点以及优缺点,再到 Robotium 主要 API 的详解,对 Native 控件以及 Webview 控件分
别从获取以及相关操作展开介绍,同时还有不少实践过程中技巧的分享,例如搜索以及等
待时间、截图、断言等。第二节深入 Robotium 的代码框架,结合代码分析,分别介绍控
件获取以及操作的具体实现原理;针对最近又流行起来的 H5 页面,着重介绍 Webview 的
基本原理,方便读者对 H5 页面进行测试。第三节通过分享 3 个实际案例(都是测试人员
会经常碰到的案例),方便读者处理类似问题。第一个案例是解决相同 ID 或者没有 ID 的
6 腾讯 Android 自动化测试实战
控件;第二个案例是对 ListView 在屏幕之外操作技巧;第三个案例则是针对一些定制化的
Webview(例如腾讯浏览器服务 X5Webview)进行适配,让 Robotium 也能快速支持定制化
Webview 的自动化测试。
第 4 章 Monkey 基本原理及扩展应用:每个从事过 Android App 测试的同学都应该使
用过 Monkey 工具。Monkey 工具也是最基础的自动化工具之一,上手比较容易,因此基
本是大家的首选。本章第一节从 Monkey 基础知识开始介绍,从参数配置到环境搭建做基
本解读,让读者能够通过本小节启动自己的 Monkey 自动化测试。第二节通过测试实例讲
解 Monkey 具体使用,以及使用 Monkey 发现 crash 后产生日志的统计分析,解决实际测试
过程中的一些问题,让读者能结合自己的项目做 Monkey 自动化测试。第三节通过 Monkey
的源码来介绍 Monkey 的代码基本框架以及某些逻辑详解,让读者清楚地了解 Monkey 运
行逻辑(需要用户有相关 Java 代码基础),使得读者“知其然更知其所以然”。Monkey 提
供的功能可能没法满足要求,我们需要通过对 Monkey 的二次开发来定制需求,第四节通
过两个实际案例来详细介绍 Monkey 的二次开发过程,这样就方便读者动手二次开发自己
的需求。
第 5 章 UI Automator 框架及实践:本章第一节先简单介绍 UI Automator 的发展历程
以及特点,让读者有一个基本认识。第二节介绍 UI Automator 整体框架、UI Automator 各
个类以及它们之间的关系,然后重点介绍五大基础类 UiDevice、UiSelector、UiObject、
UiCollection、UiScrollable。接下来重点介绍该框架两个重要事情—界面解析和事件注入,
通过代码解读这两块的基本原理。最后把 API 都注解一下,方便读者查询。第三节主要通
过实战案例来展示 UI Automator 的使用,从功能测试到性能测试以及压力测试都有相关案
例讲解,基本测试类型自动化都可以选择 UI Automator 来完成;同时总结使用过程中的问
题,如输入法、第三方包编译、adb 稳定性等问题,方便读者借鉴思路。
第 6 章 Appium 框架解析及实践:本章第一节介绍 Appium 基本架构原理以及使用到的
一些技术点,同时说明 Appium 框架的优缺点,让读者有一个大概认识,方便做自动化测
试框架选择。第二节从环境搭建入手,手把手教读者完成一个 HelloWorld 的测试示例,接
下来针对日常可能用到的方法对 API 进行解读,让读者逐步上手。第三节开始介绍自动化
测试一些进阶思路,例如接口封装以及用例设计思想,引导读者把自动化测试做得更好。
接下来以腾讯地图自动化测试实践为案例,分别从可重复性、稳定性和可维护性三个方面
详细介绍,同时对 Hybrid App 测试做了介绍,最后对 Appium 实践过程中常见问题做了解
答,方便读者借鉴,避免走弯路。
第 1 章 概 述 7
第二部分 Android 自动化测试实战篇
第 7 章 Android App 速度测试:本章选择对用户体验感知明显的一个性能点—App
速度,针对 App 速度测试来进行深度分析,从整个需求的系统分析,再到详细对比不同速
度测试方法(掐秒表、打 Log、录像、Hook 方式、网络包分析等),最后提炼出速度测试的
相关方法论,以供读者参考。
第 8 章视频性能测试案例:本章选择视频性能这个需求进行系统性分析,从用户感
知层面出发,挖掘相关需求点,再到整体性能方案的设计(从自动化执行以及结果对比等
都做详尽的分析),最后到结果分析等方面,都做了系统性详细介绍,给读者一个完整的
案例。这一章对读者基础能力要求有点儿高,除了涉及 Java 编程语言,还涉及 C 的编程
(JNI),同时要求在视频方面有一定的基础(如 FFMPEG)。
第 9 章应用宝 BVT 测试方案:Robotium 在应用宝项目的实践案例。主要介绍如何利
用 Robotium 来做 BVT(Build Verification Test), 把 App 最基础功能梳理出来,然后写成
自动化测试用例,每次持续集成编译成功,都会运行这些自动化脚本,确保每个版本基础
功能可用。同时结合代码覆盖率,可以关注覆盖度情况。代码覆盖率主要用 JaCoCo 生成,
当然 Emma 也使用很广泛。
第 10 章兼容性测试实践:Android 手机从 2007 年发布,到目前为止,有超过 2000 种
型号,系统从 2.X 到 6.X,Android 碎片化比较严重,那么怎么保证 App 在大多数的机型系
统中正常运行呢?这一章介绍如何利用业界的云测试系统进行测试。云测试系统包括百度
MTC、Testin、优测,通过使用这些云测试系统可以快速发现一些兼容性问题。