https://github.com/bboyfeiyu/android-tech-frontier/tree/master/android-blog/Google%2B%20%E5%9B%A2%E9%98%9F%E7%9A%84%20Android%20UI%20%E6%B5%8B%E8%AF%95

Google+ 团队的 Android UI 测试

  • 原文链接:How the Google+ Team Tests Mobile Apps
  • 译者:allenlsy
  • 译者博文地址:http://allenlsy.com/android-ui-tests-in-google-plus-team/
  • 校对者:

Android 测试主要分为3个类型:

单元测试(Unit Test)

区分UI代码和功能代码在Android开发中尤其困难。因为有时Activity既有Controller的功能,又有View的功能。Robolectric是一个很优秀的Android测试框架,它提供了一个Android框架的stub,这样测试运行时实际上是在JVM上运行,而不是在Android平台(比如Robotium和Instrumentation都是在Android平台运行测试),从而提高了速度。另外请参考Gradle 对 Unit tests的支持。

封闭UI测试 (Hermetic UI Test)

这个测试方法使得测试不需要外部依赖和网络请求。这样做的主要目的是提高测试速度,减少测试时的外部影响,毕竟网络调用是相对很慢的。Espresso可以用来模拟用户的UI操作。

Monkey Test

Monkey Test 就好像一只猴子在测试app一样,没有任何规律的在你的app上胡按。计算机运行monkey test的时候,每秒钟能做出几千个UI动作(可以配置这个频率),比如点击和拖拽。所以这个测试可以算是一个压力测试,用来检测ANR。


Google+ 团队总结了一些 UI 测试时的经验和策略。

策略1: 不要使用 End-to-end 测试作为UI测试

先看一些定义:UI 测试 是为了确保对于用户的UI动作,app能返回正确的UI输出。End-to-end测试(E2E test) 是通过客户端和后台服务器的交互测试整个系统。下面这个图在展示了测试步骤:

通常做UI测试,你需要后台服务器,所以可能产生网络调用。所以UI测试和E2E测试很像。但是在E2E测试中会遇到很多困难:

  • 测试速度缓慢
  • 网络请求会失败
  • 难以Debug

下面看看如何解决这些问题。

策略2:使用伪服务器做封闭UI测试

这个策略中,你可以通过假的后台服务器来避免网络请求,以及其他外部依赖。技术上,你就需要在app本地提供返回数据了。有很多办法可以做到,比如手动做一次网络请求,把response保存下来,在测试的时候重复这个response。这样你就做了一个封闭在本地的伪服务器

当你有了这个伪服务器,你还需要给这个伪服务器写测试。于是这是,你的E2E测试就分为了服务器测试,客户端测试和集成测试。

现在这样的解决方案,你需要自己维护伪服务器,本地数据库和tests了。

下面这是E2E 测试的示例图:

这是使用了伪服务器的封闭UI测试

其区别在于:Frontend Server的几个数据源变了。由原来的真实后端,变成了封闭服务器,或者是mock服务器。这个在测试调用网络API的时候非常有用。

策略3:使用Dependency Injection

Dependency Injection(依赖注入)可以帮助生成测试数据。我推荐选择使用dagger作为依赖注入框架。

依赖注入在UI test和unit test都中都可以用于生成假数据。在instrumentation test框架中,测试用的apk文件和测试时运行的app,是在同一个进程下面,所以测试代码可以调用app代码。你还可以覆盖app的classpath,通过这种方式注入假数据。比如你可以用依赖注入来伪造一个网络连接的实现,调用这个网络连接的时候就可以提供假数据。

策略4:把app分为小的libraries

这个方法可以更好地模块化你的app。你的app被分为更小的类库之后,你可以为这些类库添加他们自己的UI依赖或gradle库依赖。

当你有了自己的库,并提供依赖注入的支持,那么你可以为各个库写测试app。最后,可以写集成测试来确保类库直接的合作正确。

比如我们有一个登陆功能的库,那么我可以写一个测试app只为这个登陆功能库:

总结:

  1. 不要用E2E测试来代替UI测试。更好的做法是用单元测试 + 集成测试 + UI测试。
  2. 使用封闭测试策略
  3. 使用依赖注入
  4. 把app分为不同的小组件小类库,并分别写测试,然后再写集成测试来确保各组件之间的交互正确。
  5. 模块化 UI 测试已经被证明了比E2E测试快,并且十分稳定。这样的测试又能极大的提高开发效率。
分类: android solve
本文转自wanqi博客园博客,原文链接http://www.cnblogs.com/wanqieddy/p/4518922.html,如需转载请自行联系原作者

Google+ 团队的 Android UI 测试相关推荐

  1. Android UI 测试框架Espresso详解

    Android UI 测试框架Espresso详解 1. Espresso测试框架 2.提供Intents Espresso 2.1.安装 2.2.为Espresso配置Gradle构建文件 2.3. ...

  2. Android ui 测试课堂笔记

    开始接触Android ui测试了,笔记如下 模拟器 Genemotion , the fastest android simulator in the world Android ui 测试工具 S ...

  3. Android UI 测试指南之 Espresso

    关于 Espresso Espresso 是一个简单好用的 Android UI 测试框架 Espresso 主要由以下三个基础部分组成: ViewMatchers - 在当前View层级去匹配指定的 ...

  4. Android 单元测试之UI测试

    Android 单元测试之UI测试 UI测试 Espresso 官网地址 Espresso是Google官方的一个针对Android UI测试的库,可以自动化的进行UI测试. Espresso可以验证 ...

  5. android测试篇(三)单元测试之UI测试 Espresso学习与实践

    前言 上一章并没有说仪器化测试,仪器化测试存放在src/androidTest目录中,仪器化测试即UI测试. 本文并没有多加理解,按照Android UI 测试指南之 Espresso抄袭(会标注转载 ...

  6. 自动化测试系列 | UI测试自动化测试

    UI 测试是一种测试类型,也称为用户界面测试,通过该测试,我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG.了解用户将如何在用户和网站之间进行交互以执行 UI 测 ...

  7. 自动化测试系列(三)|UI测试

    UI 测试是一种测试类型,也称为用户界面测试,通过该测试,我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG.了解用户将如何在用户和网站之间进行交互以执行 UI 测 ...

  8. 显示空闲链表和隐式空闲链表_使用空闲资源添加Espresso UI测试

    显示空闲链表和隐式空闲链表 You may want to read the Spanish version of this article in Droid-Latam's publication ...

  9. 关于Android的UI测试

    Android 测试主要分为3个类型: 单元测试(Unit Test) 区分UI代码和功能代码在Android开发中尤其困难.因为有时Activity既有Controller的功能,又有View的功能 ...

最新文章

  1. Python面向对象编程:入门类和对象
  2. 【翻译转载】【官方教程】Asp.Net MVC4入门指南(2):添加一个控制器
  3. Core 定时任务之HangFire
  4. Python内置函数大全
  5. 想服务器不宕机,你了解Linux“体检”指标吗?
  6. MySQL(二)——DQL数据查询语言
  7. LQ训练营(C++)学习笔记_背包问题
  8. IOS沙盒中的Documents、Library、tmp区别
  9. 扫描线三巨头 hdu1928hdu 1255 hdu 1542 [POJ 1151]
  10. 【Flink】Flink 运行 实时修改消费组offset
  11. MySQL--视图view、触发器trigger、事务(start transaction)、存储过程(特殊的数据逻辑处理函数)、流程控制(if,case....)...
  12. Spark 共享变量详解
  13. 国外优秀Windows7桌面插件RAINMETER
  14. 测试用例设计之正交试验
  15. Numpy中take的用法
  16. 中控智慧身份证读卡器工具类
  17. 轻风送暖写诗意,梅雨传情送祝福
  18. 前端学习-JavaScript基础(ES6)
  19. 2017 VQA Challenge 第一名技术报告
  20. 彩虹易支付插件后台结算、会员中心秒提现集成包(哆咪付接口)

热门文章

  1. useradd和adduser的区别
  2. 【华为编程大赛】洞穴逃生
  3. Android 自定义ToggleButton+用SharedPreferences保存用户配置
  4. oracle exp不生成dumpfile,预估出实际导出文件的大小。
  5. 安装cifs 访问windows的共享文件
  6. hbase 特性与api
  7. 在线黑客帝国文字效果生成工具
  8. Python3用requests,multiprocessing多线程爬取今日头条图片
  9. Go语言命令行工具介绍-3
  10. 算法之【辗转相除法】