LinkedIn Test Butler旨在改进Android UI测试

2016 年 8 月 30 日

LinkedIn 工程师兼 Test Butler 创建者 Drew Hannay写道,Test Butler 是一款面向 Android 的开源测试工具,它允许开发人员对若干测试环境设置通过编程进行控制,从而使开发人员可以可靠地运行测试。

据 Hannay 介绍,Test Butler 的灵感来自谷歌 2014 年的演讲“环保之路:清理有毒的移动环境”。该演讲介绍了如何解决反复出现并影响移动测试的问题,比如缺少可靠性和可再现性、速度缓慢等。Hannay 表示,当结果可能受到环境因素影响时,测试就不可靠了,尤其是当它们出现在设备 / 操作系统层面时,比如 Android 模拟器的 CPU 突然休眠,不正常的设备方向变化,随机出现的锁屏,意外弹出的系统对话框,等等。所有那些事件都会导致 Espresso UI 测试失败。

为了解决这些问题,按照最初的设计,Test Butler 将作为一个后台服务在 Android 模拟器上运行,提供一些旨在增加测试环境稳定性的特性,比如:

  • 禁用动画,这是 Espresso 正常运行所需要的;
  • 通过安装一个自定义的 IActivityController 禁用系统对话框;
  • 监控模拟器的锁屏、Wi-Fi 和 CPU,保证它们不会休眠。

测试中的应用可以和 Test Butler 进行通信,并控制多个测试环境变量,比如:

  • 启用 / 禁用 Wi-Fi;
  • 在测试执行过程中通过编程改变设备方向;
  • 模拟不同的定位服务模式,比如,省电模式或者高精度模式;
  • 定义应用程序运行的区域设置。

Test Butler 的一个关键方面是,它使用面向内置 Android 模拟器的系统密钥库进行签名。也就是说,它会自动取得自己所需的任何 signature级的权限,而不需要通过 ADB,或者篡改清单文件。

下面的代码展示了如何设置应用,让其和 Test Butler 一起工作:

复制代码
public class ExampleTestRunner extends AndroidJUnitRunner {
@Override
public void onStart() {
TestButler.setup(InstrumentationRegistry.getTargetContext());
super.onStart();
}
@Override
public void finish(int resultCode, Bundle results) {
TestButler.teardown(InstrumentationRegistry.getTargetContext());
super.finish(resultCode, results);
}
}

当应用和 Test Butler 的连接建立后,你可以使用 TestButler 类提供的多种方法控制测试环境,比如修改定位服务模式、设置 Wi-Fi 状态、触发设备反转,等等。

据 Hannay 介绍,目前,LinkedIn 每天使用 Test Butler 运行超过 1 百万次测试。该工具是开源的,代码托管在GitHub 上

查看英文原文: LinkedIn Test Butler Aims to Improve UI Testing on Android

2016 年 8 月 30 日 19:00 1098
用户头像

发布了 235 篇内容,共 346 次阅读,收获喜欢 0 次。

关注

评论

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

卧槽,接到一个阎王的需求

码农神说

程序员

神经网络中为什么不能将权重初始值设置为一样的值

王坤祥

神经网络 机器学习

你有信息焦虑症吗?

Neco.W

创业 学习方法 知识体系

幂等问题及解决方案

Joker

幂等 解决方案

Go netpoll I/O 多路复用构建原生网络模型之源码深度解析

潘建锋

go 源码分析 网络编程 多路复用 开源项目

“Plus Token”传销主犯被公诉!警惕,区块链不是“取款链”!

CECBC区块链专委会

1024讲话 CECBC 区块链技术 人才发展 培训

奈学干货分享:分布式CAP实践分析

奈学教育

分布式

为什么你要学习 Go?

司徒公子

go golang 编程语言 谷歌Google

阿里巴巴为什么让初始化集合时必须指定大小?

王磊

Java 性能

终于找到了一篇文章!通俗地讲解计算机工作原理

图灵社区

cpu 存储器 编译器 计算机工作原理

备案问题汇总

云也退

网站 备案

ARTS_20200529

凌轩

Java ARTS 打卡计划

GrowingIO 大数据多维分析自动化测试实践

GrowingIO技术专栏

大数据 自动化测试 parewise

10分钟了解Flink

代码诗人

Nginx 入门及命令行操作

子杨

nginx 运维

Nginx 基础原理和命令行的真相

子杨

nginx 运维

Cassandra可调一致性的使用及原理

老任物联网杂谈

大数据 分布式 Cassandra 可调一致性

Android 通过opencv实现人脸识别,追踪

sar

android OpenCV 人脸识别

从位图到布隆过滤器

王坤祥

位图 布隆过滤器

Mysql常用删除方式比较

云也退

MySQL

2020智源-京东多模态对话挑战赛开战 产学研联合推动AI技术发展

DT极客

图片与标题的Ken Burns动效

寇云

CSS css3

「首度揭秘」大规模HPC生产环境 IO 特征

焱融科技

sds io 高性能 存储 焱融科技

工厂模式(三)泛型工厂的概念以及示例代码

LSJ

我们可能都误解了什么是情商

七镜花园-董一凡

情绪

游戏夜读 | 改写图形API的意义

game1night

用户故事为什么要关联开发数据?

Worktile

敏捷开发 开发数据

架构师训练营0期开营

刁架构

架构师

kudmp介绍和安装

唯爱

Weex开发:页面跳转以及Android端多应用选择窗口的处理

brave heart

android Vue 大前端 跨平台 Weex

基于 Markdown 的中文文档排版规范

Murphy

markdown 排版规范 GitHub GFM 物联网学前班

LinkedIn Test Butler旨在改进Android UI测试-InfoQ