稳定性1: 智能遍历基于uiautomator

1.概述

从新功能的稳定性出发,用monkey过于随机无法覆盖新功能的稳定性和找出新功能中可能出现crash的地方。基于uiautomator安卓自动化框架,实现对新功能的循环遍历,增加遍历的可控性,以发现更多新功能稳定性的问题。

2.总体功能介绍

  1. 默认遍历逻辑: 基于深度,后进先出。同时可实现在不同节点场景的回调方法,达到控制遍历的效果
  2. 支持新功能遍历,回调实现onback方法,设定遍历层级。不设定以默认模式开启

以onback为导向/导流,在遍历完指定次数后,回到新功能入口,可设置把新功能的入口元素为白名单,以不断循环覆盖提高新功能整体的操作覆盖率

  1. 遍历开始后开启一条线程实时监控logcat,当报错时记录 时间,errorlog,操作日志,截图,性能抓取
  2. 支持多种回调场景的自定义(实现Custom_Setting):
  • onBack  遍历完设定的层级后回退
  • onActionSUCCESSFUL  当进入页面后点击成功后的自定义操作
  • onNotElementHandle  当进入页面后无法找到任何控件后的操作
  • onException 任意动作抛出异常后处理动作

E.  支持基于 Element点击和Random点击 模式

抓取元素逻辑

clickedList  已点击的元素list

whiteList   优先级高,在白名单内比clikedlist高

抓取:默认抓取id,text,context_desc(webview)各前5个元素,抓取过程中过滤掉clickedList  和保护whilelist,直到各类型都满足最大为5个有效操作控件

判断成功操作逻辑

方案1: 点击前后页面的控件总数或者前5个控件信息的MD5

方案2: 点击前后图片对比(目前选择)

超过0.2的差异度算跳转成功,超过0.4算页面切换成功

action随机性

基于坐标点击

在出现键盘的时候可以设别输入随机数后按前进

随机概率长按

随机概率双击

点击/后退逻辑

获取前准备:确保处于被测应用activity下,屏幕没被锁

获取元素

每次抓取15个有限点击元素,15个中随机抽取一个做操作,操作不成功后remove掉并加入clikedlist,再从剩余14个中抽取操作,连续点击5次无效后,认定页面大多数元素无点击效果,进入下面的上滑和回退处理逻辑

若出现当前页面所有点都已经点击过且再无出现新的跳转页面时,工具会判断当前工程是否还有未完成点击的页面,且判断当前页面能否跳转过去。判断的准则是从当前页面按广度搜索下一级跳转的页面,如果有未完成的页面则跳转,若一级页面无跳转,则遍历二级的子页面,以此类推,直到找到一条可回退的路径。

遍历效果:

1. 报错信息+截图+详细log  实时发送

2.报错堆栈+操作信息+进程是否存在信息

详细的操作信息:

遍历逻辑: 基于深度,后进先出。同时可实现在不同节点场景的回调方法,达到控制遍历的效果。

onback:设置遍历的层数,遍历完这些层级会调用onback

onsuccess/failed:点击成功失败

onnoelement:当没有元素可点击

获取元素

clickedList  已点击的元素list

whiteList   优先级高,在白名单内比clikedlist高

抓取:默认抓取id,text,context_desc(webview)各前5个元素,在抓取过程中就会处理这些list里面的元素

判断跳转

点击前后图片对比(目前选择)  /  超过0.2的差异度算跳转成功,超过0.4算页面切换成功

结果报告

开启一个额外的线程在监控log,在遇到某些报错关键字(Falt,beging on crash,ANR in)的时候,会启动抓取下面信息:

详细缓存log日志,如果ANR讲抓取trace

操作日志,每次点击的坐标,进入的网站/activity

截图

发送邮件,上传平台

原文地址:https://www.cnblogs.com/season-xie/p/6337919.html