悠悠小仙仙 发表于 2019-3-11 16:59:43

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

引言:      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中。最后我们可以看到执行完测试测试后输出的日志。
【最后两步可以看一下下面程序:
页: [1]
查看完整版本: 使用UIAutomator进行相机自动化测试