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

引言:      

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

特点:

      粗暴但灵活、 简单可依赖

      缺点:无法对web做解析。

 

使用UIAutomator进行相机自动化测试_第1张图片

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实例来检测设备的各种属性,比如获取屏幕的方向、尺寸等

使用UIAutomator进行相机自动化测试_第2张图片

2.UiObject

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

 使用UIAutomator进行相机自动化测试_第3张图片

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

使用UIAutomator进行相机自动化测试_第4张图片

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中。
  • 最后我们可以看到执行完测试测试后输出的日志。

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

使用UIAutomator进行相机自动化测试_第5张图片

 

你可能感兴趣的:(android测试,android自动化测试)