写点什么

谷歌安卓 UI 自动化测试策略

2015 年 4 月 14 日

为了使大家确信“应做单元测试,就一定能做单元测试”,谷歌测试工程师 Mona El Mahdy 专门写了一篇博客,提出了几种执行安卓应用用户界面单元测试的方法。Mahdy 推荐使用 Robolectric 和 Android Studio Gradle 插件做常规的单元测试,用 Espresso UI Automator 创建和运行单元测试。

端到端的测试。Mahdy 提出的第一种 UI 测试方法是 E2E。这样的测试应该可以启动安卓应用及其所有与之相关的后端系统,使之可以在真实的场景中完成 UI 测试。重复执行这些的测试是很困难的,因为“存在很多的影响因素,比如网络带宽、实际服务器的认证、系统规模等”,所以就很难做到“E2E 测试的调试排查和稳定化处理”。为简化这些点,Mahdy 也提出了一些其他的测试策略。

用隔离的服务器测试隔离的服务器是指与外界隔离的服务器,是在本地运行的一台单独的服务器,不连接网络。在运行的时间通过依赖注入(可能需要绑定到这台服务器的静态文件)的方式提供与其他服务器的连接,如果需要的话,还可以在本地文件或内存存储中伪造一些响应数据。另一个选择是,为隔离的服务器提供一系列记录好的响应,以模拟真实终端服务器的返回值。

针对测试目的,隔离的服务器作为被测系统在同一台机器上本地运行,其上运行安卓模拟器。虽然这种方式提高了测试的执行速度,有时也会消除一些网络连接的碎片,但是它需要单独的集成测试以确保客户端应用与后端是同步的。出于这个目的,Google+ 团队用了一组“黄金的”需求/ 响应文件,大家都知道它们包含了客户端应用到终端服务器的正确的传输序列。用黄金的需求文件根据这台服务器的所有响应生成一个文件,然后再用这个文件与黄金的响应文件进行比较。

Mahdy 提出,使用隔离的服务器比 E2E 测试可以更好地完成测试,但是调试却仍旧是个难题,而且这台隔离的服务器可能会导致一些通讯碎片。所以,她提出了另一个改进方案。

使用依赖注入(DI。移动应用可以设计成支持依赖注入的,在测试期间有些模块可以用仿造模块代替。应用将和仿造的网络模块进行通讯,这个网络模块为所有请求提供应答,以取代刚才所讲的使用网络模块的隔离的服务器。这会使 UI 测试更快更可靠。在 DI 这一方面,Mahdy 建议使用 Dagger

多重类库。如果安卓应用比较大,Mahdy 建议把它分割成更多小的组件,每个和它自己的模块和视图把包到一个单独的类库中。然后,你们就可以使用单独的 DI、模拟模块和测试进行每个组件的开发和测试了。为确保整个应用的运转,需要集成的测试。这一方式更是进一步提升了测试的速度。

最后,Mahdy 总结道:“组件化的 UI 测试要比 E2E 测试快得多,并具备 99% 的稳定性。快速而稳定的测试从根本上提升了开发人员的生产效率。”

查看英文原文: Google Strategies for Automated Android UI Testing

2015 年 4 月 14 日 09:043027

评论

发布
暂无评论
发现更多内容

新鲜出炉!阿里内部开源SpringCloud Alibaba全解(全彩版)全网首发

Java架构追梦

Java 架构 面试 学习笔记 SpringCloud Alibaba

顶级!13位专家力荐Spring5为企业级开发提供一站式方案

996小迁

Java spring 编程 架构 面试

Java 程序经验小结:用私有构造器或者枚举类型强化Singleton属性

后台技术汇

28天写作

科技赋能传统产业:工业绿色可视化—核电站工艺流程组态仿真

一只数据鲸鱼

物联网 数据可视化 组态软件 绿色工业 核电站

太牛了,Alibaba出品的这份《Java并发编程实践》文档,每一步操作都直击你的内心!

Java成神之路

Java 程序员 架构 面试 编程语言

重学JS | 异步编程 Generator()

梁龙先森

前端 编程语言 面试题 28天写作

宝藏!Github上标星45K+的《Java核心神技笔记整理》,吃透消化,面试跳槽不心慌!

Java成神之路

Java 程序员 架构 面试 编程语言

阿里P8内部架构核心学习知识笔记在各大互联网上流传,限时开放下载

Java架构之路

Java 程序员 架构 面试 编程语言

APICloud的发展和应用

anyRTC开发者

ios android 跨平台 sdk APICloud

快抛弃你错误的坚持

石君

生活随想 28天写作

2020DevOps状态报告——变更管理

禅道项目管理

DevOps 运维 开发 趋势 自动化测试

毕业3年,月薪从10K到30K,万分感慨 “数据结构与算法真实太TM重要了!”

Java成神之路

Java 程序员 架构 面试 编程语言

高频量化交易机器人系统开发|高频量化交易机器人APP软件开发

开發I852946OIIO

系统开发

林昊获中国计算机学会杰出工程师奖,阿里中间件再获高度肯定,“三位一体”推动技术普惠

阿里巴巴云原生

阿里巴巴 阿里云 开发者 云原生 中间件

工业传感器:工业互联网的第一道门

浪潮云

工业互联网

快速入门案例实战:电商网站商品管理(一)

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

智汇华云 | 安超OS为企业数字化转型构建坚实的云基座

华云数据

看图学NumPy:掌握n维数组基础知识点,看这一篇就够了

华为云开发者社区

Python 机器学习 数组 Numpy

跨越全场景统一架构三大挑战,MindSpore亮出“四招”

华为云开发者社区

深度学习 联邦学习 mindspore 算子 ai框架

太牛了!Alibaba架构师耗时72天总结整理的700页Java进阶架构师宝典。

Java成神之路

Java 程序员 架构 面试 编程语言

再造淘宝电商项目落地,从零开始搭建亿级系统架构笔记,直接让你拥有高并发设计经验!

Java成神之路

Java 程序员 架构 面试 编程语言

Serverless 在 SaaS 领域的最佳实践

Serverless Devs

Serverless 云原生 SaaS

盘点2020| 开启小马哥的新未来

小马哥

盘点2020

研发管理101军规#003 实战规模化敏捷:从8人到百人的敏捷之路

PingCode

程序人生 Scrum 敏捷开发

阿里中间件团队技术官手撸笔记,全新演绎“Kafka部署实战”,已开源

Java架构之路

Java 程序员 架构 面试 编程语言

我以为自己够牛逼了,直到看到了Alibaba专家的面试笔记,我学习了三个月,却入职京东,税前36K

Java架构之路

Java 程序员 架构 面试 编程语言

electron实战练习-三个文件实现一个命令行终端

OBKoro1

node.js Electron electron实战 命令行终端 electron学习

Java 异常处理

学个球

Java java异常处理

从美国《拜杜法案》到中国供应链体系形成的内在逻辑

JiangX

供应链 28天写作 制造

软件测试--selenium安装使用

测试人生路

软件测试

如何对AD和Exchange进行安全加固满足护网需要?

嘉为蓝鲸

安全 asm AD 邮件系统 权限

谷歌安卓UI自动化测试策略-InfoQ