写点什么

Google Espresso:一种用于云中 Android UI 的快速自动化测试框架

2013 年 10 月 28 日

Google 开源了 Espresso ,这是一种 Android 自动化测试框架,使测试人员可以在云中 x86 机器的多线程环境里运行测试,并解决了关于 UI 测试的并发问题。

由于 Android 设备数量和种类众多,在真实的设备上运行测试非常耗时,而且成本很高。一种解决方案是在模拟器上执行测试。模拟器是一个可控的环境,支持多种 OS 版本、屏幕尺寸和内存限制。这种方法可以捕获大部分代码 Bug,剩下的 Bug 可以留给真实设备测试和人工测试去发现。

模拟器的问题是执行速度,其中,在模拟的 ARM CPU 上运行 Android 是一个瓶颈。为了解决这个问题,Google 已经创建了可以直接在 x86 硬件上运行的 Android 版本,并使用了 VM 加速。另一个瓶颈是 Android 的启动时间。该问题已经通过抓取 OS 快照并执行快照得以解决。该方法可以在很短的时间内提供期望的 OS 和应用程序配置。早在今年 3 月份,Google 就已经使用该方法完成了 8200 万次 Android 测试。

通过比较在 Nexus 4 和模拟器上的测试发现,后者需要真实设备上测试时间的 65% 来完成测试。因此,一个好的模拟器似乎已经解决了自动化测试问题。但是,还有另一块绊脚石。自动化测试使用 Android 的 Instrumentation API,这些 API 的调用在一个与 UI 线程不同的线程中运行,因此,使用自动化方法测试用户界面会导致严重的并发问题,进而产生不一致不可靠的测试结果。Google 对这个问题的解决方案是 Espresso ,它是一个测试框架,能够使 UI 测试在多线程环境中安全地运行,并移除了关于编写测试的大部分样板代码。Espresso 可以跨各种移动设备工作,包括电话、电视、智能眼镜、汽车等。它还可以跨不同屏幕尺寸和内存大小、多个 API 版本以及不同网络工作。据 Espresso 幕后团队介绍,他们的解决方案捕获了 Android 和应用程序中 99% 的 Bug ,只给真实设备测试和人工测试留下了少数 Bug,减少了整体的测试工作量。

下面是 Espresso 中断言视图未显示的测试示例:

复制代码
onView(withId(R.id.bottom_left)).check(matches(not(isDisplayed())));

读者可以在这里找到其它测试示例。

目前,Espresso 还处于开发人员预览状态,在Google Code 上提供。但思路是,等到它足够成熟和稳定以后,将其迁移到Android SDK 中。Google 使用Espresso 测试了他们自己的超过30 个应用程序,包括G+、Maps 和Drive。

查看英文原文: Google Espresso: Fast Automated Android UI Testing in the Cloud

2013 年 10 月 28 日 07:065732
用户头像

发布了 256 篇内容, 共 67.0 次阅读, 收获喜欢 4 次。

关注

评论

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

破解 Java Agent 探针黑科技!

谭建

Java JVMTI APM Profile

2020,这个世界会好吗?

IT民工大叔

读书笔记

【SpringBoot】掌握这两个属性,你的测试类可以启动的更快些

遇见

Java Spring Boot Unit Test

Kubernetes 容器运行时演进

倪朋飞

Kubernetes 容器 云原生

三点思考,判断一家公司是否值得加入

邓瑞恒Ryan

高效工作 个人成长 职业

极客父母送给孩子的 ABC Book 就是这么 GEEK

魏彬(rockybean)

GEEK BOOK

我的第一个千万阅读量

彭宏豪95

创作 生活 写作

Scrum vs Kanban,如何选择

TerryLee

Scrum Kanban 敏捷开发 Worktile 研发管理

聊聊:Java

谢烟客

Java 编程 开发者 随笔杂谈 「Java 25周年」

一篇文章搞定 java 中的 path 和 classpath

shengjk1

Java classpath vs path classpath path

无代码开发

Fenng

回“疫”录:开篇

小天同学

疫情 回忆录 现实纪录 纪实

禁止在构造函数里调用虚函数

喵叔

C# .net 编码习惯

关于Iterator和Iterable

shengjk1

Java Iterator和Iterable

阿里面试,一面就倒在了Java内存模型上?赶紧来看看

七哥爱编程

面试 Java并发 内存模型

你不必读完一本书

池建强

学习 读书

Flink获取kafka中每条消息对应的topic

shengjk1

flink kafka flink 消费 kafka 获取 topic等信息

用你喜欢的 emoji 作为页面的 favicon 吧 🎉

遇见

CSS html favicon emoji

简单到不可能失败 —— 《微习惯》

零和幺

读书笔记

Kubernetes中的CI/CD

倪朋飞

Kubernetes DevOps 微服务

一文搞定 equals 和 hashCode

shengjk1

Java equals vs hashcode

我从来不在朋友圈晒投资人合影,却融了很多钱

邓瑞恒Ryan

高效工作 人脉 职业规划

像黑客一样思考

Fooying

黑客思维 黑客 安全攻防

探究vscode debug流程,解决无法运行go程序的问题

simpleapples

golang vscode

如何解决 Kubernetes 的 DNS 延迟问题

倪朋飞

Kubernetes 微服务 云原生

我如何用 Python 给 Github 的 README.md 做一个访客统计功能

遇见

Python GitHub 开源 badge open-source

程序员职业鉴赏

陆陆通通

程序员 加班 职业病 鄙视链

Arduino 蓝牙遥控+超声避障小车

黄耗子皮

树莓派 极客

死磕Java并发编程(1):探究Java并发机制的底层原理

七哥爱编程

Java Java并发 并发编程

Oauth2的认证实战-HA篇

Damon

Java 架构 Kubernetes 微服务架构 Spring Cloud

GitHub知错就改,是个好同志

遇见

GitHub

Google Espresso:一种用于云中Android UI的快速自动化测试框架-InfoQ