Android自己主动化測试解决方式

Android自己主动化測试解决方式

 如今,已经有大量的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,ServiceTestCasek, SingleLaunchActivityTestCase及其它类来定义測试用例,并使用InstrumentationTestRunner类来执行測试。

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

  Robolectric另辟蹊径,它并不依赖于Android提供的測试功能,它使用了shadow objects而且执行測试于普通的工作站/serverJVM,不像模拟器或设备须要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相比,你们所提供的服务有什么优势呢?

  JML:LessPainful是一种服务,而并不不过一种架构。我们希望创建一种服务,不但使測试可以进行,而且比起其它不论什么一种架构,它可以节省我们大量測试时间,还可以帮助我们发现很多其它的bug。

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

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

  InfoQ:你们有计划未来要支持很多其它的设备吗?

  JML:是的。我们计划继续添加�对很多其它设备的支持。假设有这种要求提出,我们就会努力完毕它。

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

  InfoQ:什么是LessPainful企业版?

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

  英文原文:Automated Testing Solutions for Android


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119128.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SqlTransaction 类[通俗易懂]

    SqlTransaction 类[通俗易懂](事务详解)SqlTransaction类表示要在SQLServer数据库中处理的Transact-SQL事务。应用程序通过在SqlConnection对象上调用BeginTransaction来创建SqlTransaction对象。对SqlTransaction对象执行与该事务关联的所有后续操作(例如提交或中止该事务)。注意在提交或回滚SqlTran

  • ajax 跨域请求api_java跨域请求的三种方法

    ajax 跨域请求api_java跨域请求的三种方法让ajax请求访问servlet,可以让ajax请求跨域,通过直接本应用中的资源servlet,ajax可以不跨域访问本应用中的servlet,让java程序发送Get,Post请求,来访问2号服务器中的的servlet。ProxyServlet发送get请求,访问b站点TargerServlet,请求响应回来数据在进行响应。首先把架包导入创建lib目录,复制进去选中右键Addaslibrary。(2)ajax跨域解决方案之代理机制的代码实现。引入架包httpclient架包。…

  • Mac datagrip 2022激活码【2022最新】

    (Mac datagrip 2022激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html2KLKA7BQFO-eyJsaWN…

  • 安装cloudsim[通俗易懂]

    安装cloudsim[通俗易懂]1.CloudSim介绍       2009年,墨尔本大学的网格实验室和Gridbus项目宣布推出云计算仿真软件,称为CloudSim。它是在离散事件模拟包SimJava上开发的函数库,可在Windows和Linux系统上跨平台运行,CloudSim继承了GridSim的编程模型,支持云计算的研究和开发,并提供了以下新的特点:(1)支持大型云计算的基础设施的建模与仿真;(2)一

  • matlab心形曲线代码_matlab心形

    matlab心形曲线代码_matlab心形(1)有网格线clearx=-2:0.01:2;y=sqrt(2*sqrt(x.^2)-x.^2);z=asin(abs(x)-1)-pi./2;plot(x,y);gridon;holdon;plot(x,z);axisequal;效果图(2)无网格线t=0:0.1:2*pi;x=16*sin(t).^3;y=13*cos(t)-5*cos(2*t)-2*co…

    2022年10月17日
  • linux C编程2–linux基础1简介

    linux C编程2–linux基础1简介

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号