写点什么

Android 自动化测试解决方案

  • 2011-10-07
  • 本文字数:2089 字

    阅读完需:约 7 分钟

现在,已经有大量的 Android 自动化测试架构或工具可供我们使用,其中包括:Activity Instrumentation, MonkeyRunner Robotium ,以及 Robolectric 。另外 LessPainful 也提供服务来进行真实设备上的自动化测试。

Android 自身提供了对 instrumentation 测试的基本支持,其中之一就是位于 android.test 包内的 ActivityInstrumentationTestCase2 类,它扩展了 JUnit 的 TestCase 类来提供 Android activities 的功能测试。在应用测试中,每一个 activity 首先会被 Instrumentation 初始化,然后再加载到 Android 模拟器或设备的 Dalvik 虚拟机中来执行。

Android SDK 自带一个测试工具 MonkeyRunner ,它提供的 API 和执行环境可以运行 Python 语言编写的测试代码。它提供 API 来连接设备,安装 / 卸载应用,运行应用,截屏,比对图片来判断特定命令执行后的屏幕是否包含预期信息,以及运行对应用的测试。MonkeyRunner 使用 ActivityInstrumentationTestCase2 ProviderTestCase ServiceTestCase SingleLaunchActivityTestCase 及其他类来定义测试用例,并使用 InstrumentationTestRunner 类来运行测试。

Robotium 是另一种通过 InstrumentationTestRunner 来完成 Android 交互式测试的架构,它横跨多个 activities,支持功能测试,系统测试和接收测试。Robotium 支持 Activities、Dialogs、Toasts、Menus、Context Menus 甚至 Honeycomb,并且它可以同 Maven 和 Ant 集成来完成持续集成测试。Robotium 被称之为针对 Android 应用的又一个“ Selenium “。

Robolectric 另辟蹊径,它并不依赖于 Android 提供的测试功能,它使用了 shadow objects 并且运行测试于普通的工作站 / 服务器 JVM,不像模拟器或设备需要 dexing(Android dex 编译器将类文件编译成 Android 设备上的 Dalvik VM 使用的格式),打包,部署和运行的过程,大大减少了测试执行的时间。Pivotal 实验室声称使用 Robolectric 可以在 28 秒内运行 1047 个测试

LessPainful 将 Android 测试又推进了一步,它提供了一个多设备平台自动化测试的服务。用户上传应用 (*.apk) 和用 Cucumber (一种业务相关的 DSL)编写的测试文件,选择测试运行需要的设备配置,最后测试将自动执行并生成测试报告。它支持的设备包括 Garmin Asus,几款 HTC,LG,Samsung Galaxy,Sony Xperia 和 Motorola Motodefy。

为了了解更多 LessPainful 提供的服务细节,我们采访了 LessPainful 公司的 CEO Jonas Maturana Larsen。下面就是这次简短的访问:

InfoQ**:在不同版本的 Android 上运行用程序,存在什么问题了保程序能正常运行,开者需要在 Android 的每一个版本上测试他的?**

JML举个例子,SAXParser 在 Android 2.2 之前有一个 bug 存在于对 ContentHandler.startElement 的回调中,它导致应用产生错误的行为。

到目前为止,我们已经在很多方面发现了不同操作系统版本间的差异性。其中一些可能在 2.1-update1 上导致崩溃,但可以正常运行于 2.1-update3 和 2.2.

InfoQ**:不同的设备对Android说 ****,有没有真正的区?你能否们举个例子,比如 Android2.2用可以运行在 HTC 但不能运行于 Samsung?(或其他各种 Android 版本和设备制造商的合)**

JML在 LG 手机,HorizontalScrollViews 有时会导致子视图上的背景图片消失。这个问题存在于我们测试的所有的 LG 手机,不管 Android 版本是多少。

如果你不自己处理这类问题,它将导致你的应用在不同设备上不尽相同。例如,Motorola 将会用红色边框来高亮一个输入域。在我曾经参与的一个项目中,我们用同样的红色边框来表示输入有误。

还有一些问题,与其说和制造商相关,不如说是和硬件相关:比如,一些手机使用了较小的 RAM 和高分辨率的摄像头,当你处理手机上的图像时就会将导致崩溃。

InfoQ**:测试是如何行的?**

JML测试就如同运行一个 ActivityInstrumentationTestCase2,主要使用 Robotium 来运行。我们对应用所做的唯一修改就是去掉已有的签名,再为它重新生成我们的签名文件。

在测试运行完成后,应用会被卸载,而手机也会被恢复到初始设置。

InfoQ**:与 MonkeyRunner,Robotium 和 Robolectric 相比,你所提供的服有什么优势呢?**

JMLLessPainful 是一种服务,而并不仅仅是一种架构。我们希望创建一种服务,不但使测试能够进行,并且比起其他任何一种架构,它能够节省我们大量测试时间,还能够帮助我们发现更多的 bug。

另外,我们相信使用 Cucumber,可以清晰地定义高层次测试描述,同时可以更好地被开发团队以外的人员共享。

以 Git 领域为例,我们更希望成为像是 GitHub 那样, 而不只是通常的 git 库。

InfoQ**:你划未来要支持更多的设备吗?**

JML是的。我们计划继续增加对更多设备的支持。如果有这样的要求提出,我们就会努力完成它。

目前,我们也在着手于对 iOS 设备的支持,希望 beta 版能在今年秋季发布。

InfoQ**:什么是 LessPainful 企版?**

JML我们将提供一个工具集,它就类似于一个 Mac Mini,但我们会非常灵活的满足顾客的需求。LessPainful 企业版目前还没有正式推出,所以敬请期待。

查 **** 看英文原文: Automated Testing Solutions for Android

2011-10-07 00:4012654

评论

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

教育的本质(57/100)

hackstoic

Oracle sql 性能优化(三)

默默的成长

oracle 前端 11月月更

前端工程师面试题自检

loveX001

JavaScript

主动学习(Active Learning)简介综述汇总以及主流技术方案

汀丶人工智能

nlp 11月月更 主动学习

Web前端安全系列之:XSS攻防

GFE

前端 前端安全

各地政府先后试点“首席数据官”,数据化转型或成为城市治理的重要抓手

数造万象

数字化转型 数据治理 DataOps 大数据中台

Docker PHP 入门实践(四)

Felix

Docker thinkphp 11月月更 高德天气Api

react的jsx和React.createElement是什么关系?面试常问

beifeng1996

React

三次握手与四次挥的问题,怎么回答?

loveX001

JavaScript

鸿蒙开发入门 | 开发第一个鸿蒙应用+页面跳转

TiAmo

华为 鸿蒙 11月月更

100+款AI产品薅羊毛攻略(下)——轻轻松松节省几十万

夏夜许游

人工智能 AI 阿里云视觉智能开放平台

python小知识-并发编程(2)

AIWeker

Python 人工智能 并发编程 python小知识 11月月更

优秀开源云原生工具推荐——系列4

HummerCloud

云原生 边缘计算 优秀开源项目 开源云工具 11月月更

计算机网络:信道划分介质访问控制

timerring

计算机网络 11月月更 信道划分

怎样提高报表呈现的性能

步尔斯特

使用Socket.io库制作一个简单的实时聊天室

格斗家不爱在外太空沉思

JavaScript websocket 11月月更

云上创新!观测云携手阿里云日志服务 SLS,全面升级云上应用可观测性体验

观测云

京东云开发者|软件架构可视化及C4模型:架构设计不仅仅是UML

京东科技开发者

软件架构 架构设计 架构可视化 图形化编排 C4模型

Oracle sql 性能优化(二)

默默的成长

oracle 前端 11月月更

诚意满满的前端面试总结

loveX001

JavaScript

javascript拖拽功能

格斗家不爱在外太空沉思

JavaScript 前端 11月月更

Redis深入浅出 知识总结

何你一起

数据库 redis 缓存 11月月更

信创引领!亚信科技AntDB数据库助云南高速核心业务降本增效、系统自主可控

亚信AntDB数据库

AntDB 国产数据库 aisware antdb AntDB数据库 高速清分系统

随机森林-用随机森林回归填补缺失值

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

JavaScript箭头函数与普通函数的区别

格斗家不爱在外太空沉思

JavaScript 前端 11月月更

“吃”完这本Java性能调优实战,MySQL+JVM+Tomcat等问题一键全消

程序知音

Java MySQL JVM java面试 性能调优

千万学生管理系统存储架构设计--redis细化

Johnny

架构实战营

从URL输入到页面展现到底发生什么?

loveX001

JavaScript

Oracle sql 性能优化(一)

默默的成长

oracle 前端 11月月更

京东云开发者|深入JDK中的Optional

京东科技开发者

jdk java8 NPE 空指针 Optional

Databend 集群部署 | 新手篇(2)

Databend

开源

Android自动化测试解决方案_软件工程_Abel Avram_InfoQ精选文章