谈到 Android 稳定测试,大多数会联想到使用 monkey 工具来做测试.google 官方提供了 monkey 工具,可以很快速点击被应用,之前我有一篇帖子提到了 monkey 工具的使用,详见https://testerhome.com/topics/15966.
但是原生的 monkey 都是基于坐标随机点击的,能真正点击到控件的概率并不大,而且会跳出 app.所以 monkey 工具并不合适在持续集成使用.
主要有两个思路做替代方案:
1.基于 monkey 工具写一套脚本来执行 monkey 命令.之前也写过这样的脚本,把 monkey 命令封装一下,但是问题在于的遍历页面太少,做过统计遍历范围 15% 到 20%,所以这个方案并不完美.
2.寻找开源工具, AppCrawler、Maxim、UICrawler
AppCrawler
对 app 进行快速遍历,底层引擎基于 appium,支持 Android 和 iOS.
https://github.com/seveniruby/AppCrawler
Maxim
高速 uiautomator 控件解析算法的 Android Monkey,支持多种模式运行.
https://github.com/zhangzhao4444/Maxim
UICrawler
基于 Appium 的 AppUI 遍历工具.
https://github.com/lgxqf/UICrawler
三款工具都使用过,优缺点就不说了.目前使用是 Maxim 工具,Maxim 代码还没有开源,作者会定期发布新版本.主要是用其工具的两个功能,基于解析控件的点击和崩溃时图片导出.
需要把两个jar包push到手机sdcard目录下
adb push framework.jar /sdcard
adb push monkey.jar /sdcard
运行命令:adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.panda.videoliveplatform --uiautomatormix --running-minutes 60 -v -v
策略:
模式 DFS --uiautomatordfs 增加深度遍历算法
模式 Mix --uiautomatormix直接使用底层accessibiltyserver获取界面接口
模式Troy --uiautomatortroy控件选择策略按max.xpath.selector配置的高低优先级来进行深度遍历
保留原始monkey
选好了工具,接下来可以开发自动化脚本,预期脚本可以达到的效果.
在 Android 源码中注入内存泄漏检测代码、卡顿检测代码、启动时间测试代码
根据环境参数执行打包命令构建 app
使用 adb 命令进行安装测试
使用 appium 进行登录测试
使用脚本启动 Maxim 工具、获取崩溃日志、获取崩溃时图片
测试内存、cpu、fps、页面加载时间等性能指标
把安装测试、登录测试、稳定性、性能等数据,绘制成报告展示.
在脚本的最后一步把测试报告上传到服务端,由前端做报告展示.
把脚本也分为模块来开发,让每个模块没有关联性,后期比较方便维护.
持续集成中最常用的工具是 jenkins 平台,jenkins 可以新建 job 拉最新代码进行打包,触发后续的自动化测试.
由于自动化脚本已经模块化了,所以使用了 pipeline 模块把功能串联起来.pipeline 使用是的 groovy 语法,需要写一个 pipeline 脚本文件
使用的 pipeline 来构建自动化任务,好处在于很清晰的知道自动化脚本执行耗时和构建步骤.
1.每天晚上定期执行,可以在 jenkins 设置定时器.
2.提交代码自动触发自动化测试 job.
2.手动触发.
报告展示把自动化测试结果绘制成 html 报告,使用的是 flask 服务的 Jinja2 作为报告模版.
完成自动化测试报告会自动上报到测试平台保存,为后续的数据统计做准备.
应用基本信息
Monkey 覆盖率
内存、cpu 监控
崩溃日志、崩溃图片
!
可以在平台中查看自动化测试产生的崩溃日志和版本崩溃对比趋势.平台也可以查看每次自动化报告,出现崩溃问题直接把报告地址发给开发即可,省去了复制粘贴崩溃 log 的过程.
使用这种方式已经在几个版本中发现了不少崩溃问题,也了累计不少数据.希望自动化测试的同时,还能获取更大的价值.