Android自动化测试分析和总结.docx

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

Android自动化测试初探-1:捕获Activity上的Element

第一部分:前言

Android系统下应用程序的测试现在应该还算是个新的领域,网上关于这方面的资料很多都是基于白盒测试的,一般都是基于JUnit框架和AndroidSDK中android.test等命名空间下的内容进行,但是有一个前提,那就是必须要有应用程序的源代码以提供测试接入点,但是这在很多软件公司中是不现实的。很多测试工程师做的工作是完全黑盒,基本接触不到源代码,白盒测试大部分也是由开发自己完成。

回顾一下Windows下的黑盒测试自动化,先前使用的是微软提供的基于.netframework的UIAutomation自动化测试框架(要求版本在.netframework3.0以上,即VS.NET2008开发环境),对与擅长C#语言的人来说,使用起来确认比较好用。本人也写了基于UIAutomation的轻量级的自动化框架,将在以后的博文中引出。

那在Android操作系统中能不能做类似于UIAutomation的事情呢?不幸的是,Android的权限控制分的非常清楚,不同程序之间的数据访问只能通过Intent,contentprovider类似的功能实现。也就是说你开发的运行在Android中的自动化程序想要捕获当前运行的AUT(ApplicationunderTest)界面上的控件等Element(该术语引自UIAutomation,觉得翻译成元素有点生硬,故不作翻译)基本不可能,你也拿不到当前activeactivity的引用(截止本文发帖为止,个人暂时没有找到办法获得此引用)。

无路可走了?模拟器里面不能走,外面能不能走?或许可以。第二部分:捕获Activity上的Element

在Android的SDK中自带了一个对自动化测试比较有用的工具:hierarchyviewe(r位

于SDK的tools目录下)。在模拟器运行的情况下,使用该工具可以将当前的Activity上的Element以对象树的形式展现出来,每个Element所含的属性也能一一尽显。这有点像Windows上运行的UISPY,唯一遗憾的是不支持事件的触发。不过没有关系,可以想办法绕,当务之急是能在自行编写的自动化测试代码里找到Activity上的Element。

第一个想到的办法就是看hierarchyviewer源码,不巧,网上搜了一下,没有资源。或许Google的官网上有,但是上不去。看来只能反编译了,找来XJad,暴力之。虽然反编译出来的代码很多地方提示缺少import,但代码基本上是正确的。看了一下,确实也知道了许多。后来在编写代码的过程中,确实也证明了如果想引用hierarchyviewer.jar这个包并调试,还是需要知道里面的一些设置的。

创建基于hierarchyviewer.jar这个包的调用,需要将它和另外两个包,ddmlib.jar(在hierarchyviewer.jar同级目录中有)和org-netbeans-api-visual.jar(需要下载并安装netbeans,在其安装目录中有)一并导入到工程项目中,因为hierarchyviewer的实现依附于这两个包。

想在代码中获取Activity上的Element需要进行如下几个步骤(如果使用过hierarchyviewer这个工具后会发现,自动化代码所要写的就是该工具上的使用步骤):

Ensureadbrunning

Setadblocation(因为hierarchyviewer和模拟器的沟通完全是依靠adb做的,所以设定正确的adb程序的位置至关重要,本人就曾在这个问题上栽了半天多)

GetActiveDevice(这个等同动作发生在启动hierarchyviewer工具时)

StartViewServer(等同于工具上StartServer菜单触发事件)

LoadScene(等同于工具上LoadViewHierarchy菜单触发事件)

GetRootViewNode(获得对象树的根节点,这个动作在工具上点击LoadViewHierarchy

菜单后会自动加载)

GetSubViewNode(获得想要查找的ViewNode,这个动作在工具上点击LoadViewHierarchy菜单后会自动加载)

说明:上述步骤中一些名称实际上就是hierarchyviewer中所提供的可访问方法名称,如startViewServer、loa

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档