51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1974|回复: 0
打印 上一主题 下一主题

使用UIAutomator进行相机自动化测试

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-11 16:59:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

引言:      

UIAutomator作为基于控件的自动化框架的一种,具备的强大兼容性及应用的灵活性, 可以很好地帮助我们解决自动化过程中的问题。


特点:

      粗暴但灵活、 简单可依赖

      缺点:无法对web做解析。


uiautomator的框架有9个类,分别是

·UIAutomationSupport: UI测试信息拓展类。

·UIAutomatorTestCase: UI测试基类。

·UICollection: UI测试控件集合。

·UIDevice: UI测试设备抽象。

·UIObject: UI测试控件抽象。

·UIObjectNotFoundException: UI测试控件无法找到的异常。

·UIScrollable: UI测试可滚动控件。

·UISelector: UI测试控件选择器。

·UIWatcher: UI测试界面观察者

uiautomator的常用API


1.UiDevice:

设备对象,通过UiDevice的getInstance(instrumentation)方法获取,可以通过UiDevice实例来检测设备的各种属性,比如获取屏幕的方向、尺寸等


2.UiObject

通过uiDevice的findObject()方法获取可以获取手机控件,然后就可以对UI控件进行相关的操作,比如点击、长按等:


对于手机软件中控件的描述可以通过UIAutomator获取到


UIAutomator的原理:

      作为基于控件的自动化测试框架, 有两件比较重要的事情, 即界面解析和事件注入。 界面解析以获取目标控件, 事件注入以完成操作交互。在UIAutomator自动化测试过程中, 界面解析和事件注入最终都依赖于UiAutomation来完成, 而UiAutomatorBridge相当于UiAutomation的代理, 作为两者之间调用的桥梁, 几乎所有事件的处理及交互, 都经过UiAutomatorBridge进行派发。

       UiAutomatorBridge与UiAutomation的关系: UiAutomatorBridge持有UiAutomation的实例作为成员变量, QueryController及InteractionController在执行事务的时候, 会通过UiAutomatorBridge来获得UiAutomation的实例进行调用。

       UiAutomatorBridge与UiDevice的关系: UiDevice成员变量中拥有UiAutomatorBridge的实例, 视其为UiAutomation的代理, 所有与界面解析及事件注入相关的事务, 都调用UiAutomatorBridge来进行。

       UIAutomator界面解析和事件注入的流程, 可以稍做总结如下:

       ·UIAutomator界面解析、 事件注入均由UiAutomation来完成。

       ·UiObject对象可以理解成使用时才被实例化, 每次调用都会重新解析实例化。

      ·UIAutomator的操作事件非基于控件, 最终都转换为坐标执行。

      ·控件遍历过程中每次只返回一个节点信息而不是控件树, 效率比较低


编写UIAutomator自动化测试脚本大体过程:

     1.使用UIAutomator2中的instrumentation框架,调用UIdevice,UIobject这些常用的类。

     2.最后通过实例化UIdevice,创建测试用例,调用一些常用的API来实现模拟用户操作的过程。



一个简单的小demo:

我用UIAutomator创建一个简单的相机自动化测试流程:


1、使用Android SDK自带的UIAutormatorViewer界面解析器来进行界面解析。通过点击界面中的目标控件,获得空间的元素属性(如text,description,resource-id,package等),这些属性在后面操作控件的方法API中会用到。

2.创建测试用例,编码模拟用户操作过程


   a). 在执行测试用例前运行setup(),用于环境准备。(调用instumentation框架啊,实例化UIdevice类啊)

   b). 写测试用例


设置循环执行测试1200次,执行完一轮就打印一下次数

点击“相机”控件

打开相机后,点击拍照按钮

转换前后摄像头,再次拍照

切换相机到AICamera模式,再拍照

.......


(每次执行一个测试用例,延迟时间2~3秒,让相机有反应时间)

一旦相机出现crash或者ANR问题,就跳出执行测试用例的循环,打印出当前时间(以便在log在文件中查找),并执行让手机截屏命令,将问题图片以“报错时间”来命名,保存在sdcard中。

最后我们可以看到执行完测试测试后输出的日志。


【最后两步可以看一下下面程序:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-14 14:46 , Processed in 0.065528 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表