遍历测试最近是个比较热的移动测试话题。从腾讯的NewMonkey,到appcrawler,大家似乎对原生Monkey深恶痛觉。最近项目里也调研了一下android遍历测试的做法。目前网上的遍历测试都是对整个App进行遍历测试,但是都会遇到“无法自拔”的问题。这个问题我也是没有想到好的办法,所以我的思路是遍历测试只做单activity的遍历。这样树是有限的了。我觉得遍历测试还是达不到压力测试的目的,只能作为辅助检查各个控件操作时是否会发生崩溃。
总结思路及注意的点如下:
- 通过schema调起activity.(一般app都已经解耦了,可以这么做)
- 获取activity控件时过滤resourceid为空,或者控件width或heigth小于50px的控件(clickable经常是不准的),过滤包名不是被测包的控件,这样可以过滤掉系统控件(如状态栏等)。
- 获得控件列表数组后对数组进行乱序处理,这样做可以防止fragment切换,但是控件树不变而导致的死循环(如头条的频道切换)
- 增加activity黑名单,即进入这些activity立即返回。如webview及其封装
- 控件操作,对于listview或者scollable为true进行滑动操作
- 获取activity方式,通过adb shell dumpsys acitivity activities后寻找(如果是在PC上可以结合grep,awk等命令快速获得,手机上命令通常都被阉割了)
- 执行遍历,每次操作后获取当前activity,如果跟操作前的avtivity不同则执行back操作,如果多次back仍没有返回到之前的avtivity则通过schema重新调起。如果相同则重新获取控件树。
- 通过adb shell am monitor进行crash监控。
- 控件的操作可以根据控件特性进行,如前面提到的scollable为true的可以滑动,editText可以执行输入文本。
- 获取用户使用频率最高的activity schema,结合脚本多次运行遍历脚本。