1.概述
从新功能的稳定性出发,用monkey过于随机无法覆盖新功能的稳定性和找出新功能中可能出现crash的地方。基于uiautomator安卓自动化框架,实现对新功能的循环遍历,增加遍历的可控性,以发现更多新功能稳定性的问题。
2.总体功能介绍
- 默认遍历逻辑: 基于深度,后进先出。同时可实现在不同节点场景的回调方法,达到控制遍历的效果
- 支持新功能遍历,回调实现onback方法,设定遍历层级。不设定以默认模式开启
以onback为导向/导流,在遍历完指定次数后,回到新功能入口,可设置把新功能的入口元素为白名单,以不断循环覆盖提高新功能整体的操作覆盖率
- 遍历开始后开启一条线程实时监控logcat,当报错时记录 时间,errorlog,操作日志,截图,性能抓取
- 支持多种回调场景的自定义(实现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
截图
发送邮件,上传平台