移动性能测试 | 持续集成中的 Android 稳定性测试
前言
谈到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/AppCrawlerMaxim
高速uiautomator控件解析算法的Android Monkey,支持多种模式运行.
https://github.com/zhangzhao4444/Maxim
UICrawler
基于Appium的AppUI遍历工具.
https://github.com/lgxqf/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的过程.
结语
使用这种方式已经在几个版本中发现了不少崩溃问题,也累计了不少数据.希望自动化测试的同时,还能获取更大的价值.
移动性能测试 | 持续集成中的 Android 稳定性测试的更多相关文章
- Jmeter+jenkins如何快速搭建接口和性能测试持续集成解决方案-[基于windows篇]
最近在用Jmeter本来想写一个详细的使用教程,突然看到有前辈已经写好了不错的教程,特此"借花献佛"整理出来分享给大家! Jenkins + Jmeter 构建接口.性能测试持续集 ...
- 利用Hudson持续集成来执行Android自动化测试(转)
当你套用Athrun.Robotium等框架,针对自己的项目写完了一堆自动化测试脚本后,在Eclipse之外怎么让它们可以持续性地跑起来并展现报告呢? 据我了解,方便的方法大致有两个:其一,利用Hud ...
- Docker+Jenkins持续集成环境(5): android构建与apk发布
项目组除了常规的java项目,还有不少android项目,如何使用jenkins来实现自动构建呢?本文会介绍安卓项目通过jenkins构建的方法,并设计开发一个类似蒲公英的app托管平台. andro ...
- jenkins+github持续集成中的坑
1.前言 刚开始开发自己的独立博客的时候,每次发布都要手动打包,上传服务器,杀tomcat进程,重启,来回这么重复性工作,很快就有点不耐烦了.如果能自动化的东西,就绝不要手动了,所以自己搭建了个持续集 ...
- DevOps实践之持续集成Jenkins(最新版本测试)
一.安装Jenkins (1)下载并安装配置Java Development Kit 8 [root@localhost ~]# rpm -ivh jdk-8u161-linux-x64.rpm Pr ...
- 性能测试持续集成(Jenkins+Ant+Jmeter)
一.环境准备: 1.JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.Jmeter:http://jme ...
- jmeter+Jenkins 持续集成中发送邮件报错:MessagingException message: Exception reading response
已经配置好了发送邮件的相关信息,但是执行完脚本出现报错:MessagingException message: Exception reading response 1.查看Jenkins本次构建的控 ...
- 【Jmeter】利用Jmeter+ant+Jenkins 搭建 接口&性能测试 持续集成平台
https://www.jianshu.com/p/6ab73a95d53e https://yq.aliyun.com/articles/664329
- Android稳定性测试工具Monkey的使用
综述 Monkey是一个命令行工具,它可以运行在我们的模拟器或者设备当中.它可以发送一些伪随机的用户事件流,例如点击.触摸.手势等.我们能够使用Monkey工具来对我们所开发的应用进行压力测试. ...
随机推荐
- Angular问题01 创建组件时报错、HammerJS找不到
1 利用ng创建组件时出现错误 1.1 ng g c test/testHome 1.2 问题描述 当angular应用中有多个module.ts文件时,创建组件时会出现冲突,因为有多个module. ...
- wenfrom的简单控件和repeater控件
简单控件 lable 转换成<span>标记 literal 空的 什么也没转换 Literal.Text=<script>alter('你好');</scrip ...
- Blender 安装
Blender 安装 Blender 安装 windows 上安装 Blender 搞定 Ubuntu Linux 上安装 Blender 搞定 windows 上安装 Blender Step 1 ...
- Blender 工具使用——显示键盘和鼠标操作
Blender 工具使用--显示键盘和鼠标操作 Blender自己本身就带有显示按键和鼠标的功能,就是3D View: Screencast Keys插件. 打开 File(文件) -> Use ...
- python 简单的数据库操作之转账
介绍:本文是关于数据库的简单操作,实现转账(只是修改数据库中用户的账户金额)的功能 模块介绍:首先是入口主函数 主函数中实现转账方法 以及异常的处理: if __name__ == "__ ...
- Java中常见设计模式面试
一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...
- 数据库commit问题
对数据库进行修改后,需要commit!---之前也是忘记commit导致数据库反应不过来.
- 前端(HTML/CSS/JS)-CSS编码规范
1. 文件名规范 文件名建议用小写字母加中横线的方式.为什么呢?因为这样可读性比较强,看起来比较清爽 https://stackoverflow.com/questions/25704650/disa ...
- 树莓派(Raspberry Pi 3) centos7使用yum命令报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
使用yum命令报错 File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^SyntaxError: invalid ...
- libsvm使用简介
libsvm是support vector machine的一种开源实现,采用了smo算法.源代码编写有独到之处,值得一睹. 常用结构 svm_node结构 定义了构成输入特征向量的元素,index为 ...