Android自动化测试框架UIAutomator原理浅析

Android自动化测试框架UIAutomator原理浅析,第1张

概述UIAutomator是一个Android自动化测试框架,是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架,它只能用于UI即黑盒方面的测试。所以UIAutomator只能运行在Android4.1之后的版本,其最大的特点是可以跨进程 *** 作。我们可以使用UIAutomator框架提供的一些方便的API来对Androi

UIautomator是一个AndroID自动化测试框架,是谷歌在AndroID4.1版本发布时推出的一款用Java编写的UI测试框架,它只能用于UI即黑盒方面的测试。所以UIautomator只能运行在AndroID4.1之后的版本,其最大的特点是可以跨进程 *** 作。我们可以使用UIautomator框架提供的一些方便的API来对AndroID应用进行一系列的自动化测试 *** 作,如点击、滑动、键盘输入、长按以及常用的断言方法。可以代替繁复的手工测试。

优点:

Google自家推出,其稳定性和后续的维护更新可以得到保障,运行也有更多的权限。可以跨进程 *** 作,这点比起其他基于instrumention框架的自动化工具如Robotium是无法直接做到的。运行速度快。

缺点:

不支持AndroID4.1以下的版本。不支持WebvIEw,所以一般无法对浏览器应用进行测试。原理

首先,Google的UIautomator参考微软的UIautomation提供的一套用在AndroID上的自动化测试框架。 基于AndroID AccessilibilityService。 在这里简单介绍一下:AccessilibilityService是一个可访问服务,它是一个为增强用户界面并帮助残疾用户的应用程序,或者用户可能无法完全与设备交互。举个简单的例子,假如一个用户在开车。那么用户就有可能需要添加额外的或者替代的用户反馈方式。其应用方式一般有两种:

第一种方法是:UIautomatorVIEw + monkey。它与hIErachyvIEw + monkey差不多。其区别是:UIautomatorVIEw通过ADB向设备侧发送一个dump命令,而不是建立一个socket,下载一个包含当前界面控件布局信息的xml文件。相比较hIErachyvIEw下载的内容而言,该文件小很多。因此,从效率上讲,这种方法比第一种应用模式快很多。

第二种方法是: 直接调用UIautomator框架对外提供的API,主要有UIDevice、UISelector、UIObject和 UIScrollable等。其原理与第一种方式即HIErachyVIEw + Monkey差不多。其过程大致是:首先,UIautomator测试框架通过Accessibilityservice,获取当前窗口的控件层次关系及属性信息,并查找到目标控件。若是点击事件,则计算出该控件的中心点坐标。其次,UIautomator通过 inputManager.getInstance().injectinputEvent隐藏接口来注入用户事件(点击、输入类 *** 作),从而实现跨进程 自动化的目的。

UIautomator对外还提供了UIautomatorTestCase、UIDevice、UISelector、UIObject、UICollection、UIScrollable等重要的类,其各自的作用如下:

UIautomatorTestCase :这个类是继承自 Junit TestCase (Junit),对外提供setup、teardown等,以便初始化用例、清除环境等。所以我们在编写的 UIautomator 的脚本时一般都要继承这个类,这样就可以直接使用它的一些方法和Junit单元测试框架中的Assert断言机制。UIObject :UIObject可以代表页面的任意元素,但它的各种属性定位通常是通过UISelector这个类来辅助完成的。UIDevice :在测试时可以通过getUIDevice() 来实例化UIDevice对象去对设备进行各种控制,如唤醒屏幕,锁屏,点击Home, Back,Menu键等等。UISelector : 主要是通过一定查询方式,可以通过UISelector对象去定位UI元素。如果发现多个满足条件的控件则会返回第一个控件,在使用UISelector 的时候可以组合使用多个属性来定位具体的控件,还可以使用childSelector()函数来嵌套UISelector对象。UICollection: UICollection一般与UISelector连用,如它的构造函数也要求提供UISelector: UICollection(UISelector selector)。它的API较少,主要用以从UIselector筛选出的元素集中挑出所要的元 素:getChildByDescription(), getChildByInstance(), getChildByText() ,以及统计元素集的个数getChildCount()。UIScrollable:UIScrollable 用来表 示可以滑动的界面元素,其继承关系为UIObject -> UICollection ->UIScrollable。但UIautomator的实现方式与HIErachyVIEw+Monkey有很大不一样。以控件点击 *** 作为例, 其实现流程大致如下:

定义一个点击对象Object,该对象则通过UISelector对象定位到具体的控件。而UISelector则通过 UIautomatorBrIDge(它可看做是UISelector与AccesibilityService之间的连接器),将查询内容 (AccessibilityNodeInfo)和输入事件(AccessibilityEvent)传给AccessibilityService。实 际业务过程比这复杂的多。这样,就实现了对某个控件的查找或点击 *** 作。备注:AccessibilityEvent,所有可 *** 纵的UI元素都定义为一个 AccessibilityEeventt;AccessibilityNodeInfo指视窗中的组件树节点。

https://my.oschina.net/zhangyujian/blog/3023389

总结

以上是内存溢出为你收集整理的Android自动化测试框架UIAutomator原理浅析全部内容,希望文章能够帮你解决Android自动化测试框架UIAutomator原理浅析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存