移动性能测试 持续集成中的 Android 稳定性测试

xinxi · 2018年11月17日 · 最后由 jerryking 回复于 2021年11月18日 · 8092 次阅读
本帖已被设为精华帖!

前言

谈到 Android 稳定测试,大多数会联想到使用 monkey 工具来做测试.google 官方提供了 monkey 工具,可以很快速点击被应用,之前我有一篇帖子提到了 monkey 工具的使用,详见https://testerhome.com/topics/15966.

但是原生的 monkey 都是基于坐标随机点击的,能真正点击到控件的概率并不大,而且会跳出 app.所以 monkey 工具并不合适在持续集成使用.

替代方案

主要有两个思路做替代方案:

1.基于 monkey 工具写一套脚本来执行 monkey 命令.之前也写过这样的脚本,把 monkey 命令封装一下,但是问题在于的遍历页面太少,做过统计遍历范围 15% 到 20%,所以这个方案并不完美.

2.寻找开源工具, AppCrawler、Maxim、UICrawler

三款工具都使用过,优缺点就不说了.目前使用是 Maxim 工具,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

根据环境参数执行打包命令构建 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 的过程.

结语

使用这种方式已经在几个版本中发现了不少崩溃问题,也了累计不少数据.希望自动化测试的同时,还能获取更大的价值.

共收到 46 条回复 时间 点赞
仅楼主可见
52楼 已删除
花开 Android FPS 方法探讨 中提及了此贴 10月25日 02:20

开源吗,楼主

xinxi #51 · 2019年03月10日 Author
thanksdanny 回复

wx:nick_xin

仅楼主可见

开源吗?

很不错的尝试,学习了!

@xinxi1990 问下报告的部分能开源或者有什么模板吗?谢谢!

Joe 回复

maxim 跑完后的日志底部就有哇

就是#24 楼您回复的这个:

zhangzhao_lenovo #24 · 1 月前
对 thanksdanny #23 回复

max 跑完会有个 activity 遍历统计

Joe 回复

遍历统计路径你是指?

Sandm 回复

随机的。 如果希望固定,可以加上 seed 试试

请问下这个遍历统计路径是哪里呢?需要在 shell 端配置什么吗?没有找到相关的说明。。

Maxim 每次压测的时候,执行的顺序都是固定的吗还是的随机的呢

simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 12:08

mark 一下学习

先 mark 再学习

安涛 [该话题已被删除] 中提及了此贴 12月21日 16:29
ivy520 [该话题已被删除] 中提及了此贴 12月16日 23:53
ivy520 [该话题已被删除] 中提及了此贴 12月16日 22:55
simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44

xinxi,你那个性能的折线图是用什么绘制的?

很想知道,楼主是怎么遍历 app 的,我看楼主说 “主要是用 Maxim 的两个功能,基于解析控件的点击和崩溃时图片导出”

xinxi 持续集成中的 Android 稳定性测试 - 续 中提及了此贴 12月07日 21:52
yuweixx 回复

应该是接入 leakcanary,blockcanary。这些都是开源的,可以自己查询一下

yuweixx 回复

关于这块准备在写的帖子, 再等下吧

"在 Android 源码中注入内存泄漏检测代码、卡顿检测代码、启动时间测试代码"
能说一下这一块的具体做法吗?

xinxi #25 · 2018年12月05日 Author

启动时间就是用 adb 命令获取的

xinxi #24 · 2018年12月05日 Author
Ribosome 回复

max 跑完会有个所以 activity 遍历统计, 统计 app 的 activity,可以用 aapt 获取或者解析代码中的 AndroidManifest.xml 文件.

xinxi #23 · 2018年12月05日 Author
zhanglimin 回复

经过测试使用,大部分主要页面能都遍历到.

我想问下楼主 monkey 稳定性测试的比例是遍历的页面比例吗,会不会有一种场景有个使用率很高并且功能也很多的页面被漏掉那

thanksdanny 回复

max 跑完会有个 activity 遍历统计

你好呀,想请教下是怎么统计那些遍历过的页面的。
我的思路是先 aapt 去获取 apk 的所有 activity,然后在获取性能数据的过程中顺便记录当前 activity,最后跑完 monkey 后再对比

xinxi 回复

想请教一下楼主,遍历的页面数量和代码中所有页面的数据要用什么方法获取呢

xinxi 回复

我安装了这个 apk,并在服务中打开了开关,adb install 安装时,还是不会自动点击呢

楼主使用的启动时间程序具体是哪个呢?有 github 链接吗?

xinxi #37 · 2018年12月01日 Author
hljycrgl 回复

可以使用 AccessibilityService 监听事件,参考这个项目并安装 apk 运行,https://github.com/xinxi1990/autoinstall

楼主好,安装应用时,很多手机都会弹出安装确认框,该如何处理呢?

思寒_seveniruby [该话题已被删除] 中提及了此贴 12月01日 14:20

对的。 楼主, 有开源,或者部分开源的计划吗? 方便学习。谢谢啦

学习了

xinxi #12 · 2018年11月26日 Author
riklu 回复

这种不区分 app,webview 具体的 app 也可以

@xinxi 楼主,请问这几种方案,哪种更适合混合 app,webview 居多的 app 这几种是否有适合的呢?谢谢!

楼主大佬能不能开源一下~

瞧瞧 回复

覆盖率=遍历的页面数量/获取代码中所有页面

最近在搞 UI 深度自动化测试,学习了

mark 一下

Monkey 覆盖率 这个怎么统计的呢?

学习一下

mark 一下学习一下,最近正在学习怎么搞持续集成的稳定性测试

mark 一下,和我现在做的思路差不多,不过我的整体进度还没有楼主那么快。目前只是把双端的性能数据采集完成,还没有实现图形化以及回溯功能。

先 mark,后面仔细学习

思寒_seveniruby 将本帖设为了精华贴 11月19日 18:12

学习了

学习了,参考一下先😁

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册