漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃monkey日志
漫谈:
从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃日志
1、APP崩溃率标准
开发或测试app的同学,对于app崩溃肯定非常熟悉,频繁的线上崩溃属极度严重事故,肯定会给团队和个人带来KPI的低下,防患于未然就成了重中之重
1.1 常见的检测崩溃手段
- 业务测试,普通测试,环境版本兼容性测试,开发调试中遇到
- 健壮性测试:【数据状态异常、http请求状态异常、网络状态异常(网络波动)、大数据、特殊场景、等等】
- monkey测试
- 友盟等线上检测工具监控错误率、错误日志
1.2 崩溃率标准
这是听云2016年提出的移动应用崩溃率标准,也是行业目前参考最多的标准
2、Monkey介绍拓展Maxim
常规的测试并不能完全使app的崩溃率达标时,这时候往往需要借助monkey进行一些压力测试
2.1 Monkey介绍
Monkey是android系统自带的一个测试小工具,原理是存在一个事件库,并随机进行对事件进行随机操作
Monkey 程序是由 Android 系统自带,使用 Java 语言写成。在Android文件系统中的存放路径是: /system/framework/monkey.jar;
Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;
执行命令
$ adb shell monkey [options] <event-count>
官方文档:http://www.android-doc.com/tools/help/monkey.html 官网描述部分截图如下
常用参数:
$ adb shell monkey -p packagename -s 12345 --throttle 500 -v -v 500
-p 包名、-s 随机生成器seed值、--throttle 每个事件固定延迟毫秒、-v -v 日志级别 500:500次
其他参数和调试见官方文档
2.2 Monkey拓展Maxim
Maxim是基于 Android Monkey 二次开发,实现高速点击的 Android Monkey 自动化工具 fastmonkey - 代号 Maxim,maxim介绍地址
testhome:https://testerhome.com/topics/11719
github:https://github.com/zhangzhao4444/Maxim
2.2.1 对比monkey优势特性
a. 速度快 每秒10-15个Action事件
b. Android全平台兼容
c. 防跳出
d. 防休眠
e. 熔断机制
f. 场景细粒度
g. 随机自动输入
h. 崩溃堆栈自动保存
2.2.2 运用使用
1、环境预备: 在github上下载framework.jar , monkey.jar 这两个文件
- 支持 Android 5,6,7,8,9,10真机及模拟器; Android 5不支持 dfs mode
- 将 framework.jar , monkey.jar push 到手机上某个目录中,建议
/sdcard
adb push framework.jar /sdcard
adb push monkey.jar /sdcard
2、执行
cmd 命令 :
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 tv.panda.test.monkey.Monkey: monkey入口类,不要修改
com.panda.videoliveplatform: 被测app包名,需要修改
--uiautomatormix: 遍历策略
注:Maxim实质还是monkey,所以很多monkey的基础参数同样适用
3、Jenkins自动化配置持续集成获取崩溃日志
通过服务器远程adb connect ip 连接到手机,将新包安装到该手机,并执行monkey脚本后,将崩溃日志上传到workspace,生成构建后文档,直接下载此文件即可获得崩溃日志
3.1 关于服务器远程adb connect ip连接到手机
先本地通过usb连接到手机,
运行 adb devices {查询是否usb连接到该手机,请打开手机调试开关}当能够获取到devices id时
运行 adb tcpip 5555 {重置端口5555} 重置后 断开usb数据线
运行 adb connect 10.180.xx.xx:5555 {通过wifi局域网网连接adb 连接该手机,必须手机的wifi和执行命令的电脑在同一局域网} 连接成功后下方会提示
运行 adb disconnect 10.180.xx.xx:5555 {断开adb 远程连接,方便服务器连接,一个端口只能连接一个,服务器同时连接需要输入其他端口}
#连接设备
device_ip=10.180.xxx.xxx:5556 #检查adb
echo -e "--->检查adb"
which adb
adb kill-server
adb start-server #wifi连接设备
echo -e "--->wifi连接设备"
adb connect ${device_ip}
adb devices | grep ${device_ip}
exitCode=$?
if [[ $exitCode -ne 0 ]]; then
echo -e "设备${deivce_ip}连接失败,请检查设备无线调试状态"
echo -e "设备${deivce_ip}连接失败,请检查设备无线调试状态" > ${WORKSPACE}/results.txt
exit 1
fi
# 唤醒屏幕&解锁屏幕
echo -e "--->唤醒屏幕&解锁屏幕"
adb shell input keyevent 224
sleep 3
3.2 关于测试包的卸载安装及初始化处理
1、最好选用提供android打包的那台机器,比较容易获取到打出来的测试包,也可通过其他方式运行前去取最新的测试包
2、adb 卸载老app,并安装新的app
3、可以直接使用现有的自动化脚本启动app后的一系列数据准备工作:如登录账号,权限确认,自定义协助进入目标模块
3.3 执行Maxim的monkey命令脚本
拿QQ app举个例子
com.tencent.mobileqq
adb shell "CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.tencent.mobileqq --running-minutes 30 --throttle 200 --pct-uiautomatormix 80 --uiautomatormix -v -v --output-directory /sdcard/max-output"
--output-directory /sdcard/max-output 这是崩溃日志的输出路径,每次拿这个目录即可,历史的文件会自动变成max-output1,不用担心重复还是历史文件
adb pull /sdcard/max-output/ $WORKSPACE 将崩溃日志上传到工作空间
3.4 上传日志
Jenkins配置
最后下次文件即可获取到崩溃日志
这样每次想获取崩溃日志时,无论身边有没有测试手机都可以获取到崩溃日志,但必须有一部测试手机一直充电放在公司,最好是设置定时任务,隔一段时间就跑一次。
4、写在最后
这篇博客只是非常简单的抛砖引玉把一系列串联整合起来了,并没有任何难点,各个环境详细了解需查看官方文档或其他资料,欢迎大家一起讨论和交流一些新的idea
科技飞速发展的今天,公司的竞争压力也会越来越大,app的稳定性尤为重要,出现崩溃的差评很是刺眼
除了跑monkey预防还需要靠周期性获取线上崩溃靠前的日志排名,将崩溃修复,如果那个迭代放松,就很有可能崩溃率上升明显,影响kpi,这是一个漫长持续的过程,所以将脚本配置到Jenkins非常合拍。
最近团队变化有点多,线上问题层出不穷,团队的APP结合了Native、H5、RN、Flutter、mPaaS小程序,目前mPaaS快要成为主流,很多同学都在调整和转岗,在变动阶段需求少了不少,然后空下来有时间把东西整理一下了
最后,开发也好,运维也好,测试也好,一定要对质量有敬畏之心~~~
漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃monkey日志的更多相关文章
- 友盟+U-APM应用性能报告:Android崩溃率达0.32%,OPPO 、华为、VIVO 崩溃表现良好
随着信息技术高速发展,移动互联几乎已成为了一种生活方式的代名词,在全民上网的数字热潮中,如何能最大程度保障产品服务的稳定性,提供良好的用户体验,是当前企业都需要思考和亟待解决的问题.App的应用性能 ...
- ios 获取崩溃日志
虽然有了try catch异常捕获,但是还是存在崩溃异常无法捕获到的.我可以通过下面的方式来获取崩溃日志: - (BOOL)application:(UIApplication *)applicati ...
- 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理
1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈 跟踪信 ...
- [原创]App崩溃率统计工具推荐
[原创]App崩溃率统计工具推荐 1 友盟(推荐) 友盟是一款比较成熟的工具,同时也可以展示留存,日活,事件等. 2 Bugly 腾讯的bugly统计数据也算是比较早的,可惜后续维护比较弱,功能与 ...
- toast提示信息获取和Monkey笔记
获取toast toast提示信息出现场景:用户输入用户名和密码后,提示的'登录成功', 用之前的定位方法获取不了,需要Uiautomator2来获取 安装node.js (使用 npm 或 node ...
- Android monkey介绍
Android monkey介绍 原文地址 1 简略 monkey是android下自动化测试比较重要的的一个工具,该工具可以运行在host端或者设备(模拟器或真实设备).它会向系统发送随机事件流(即 ...
- iOS获取崩溃日志
重要提示: 此文档不再更新.有关Apple SDK的最新信息,请访问文档网站. 来源: https://developer.apple.com/library/archive/qa/qa1747/_ ...
- 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明
第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明 设置后台列表页面可以直接修改字段内容 在当前APP里的adminx.py文件里的 ...
- 第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置
第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置 设置后台某个字段的排序规则 在当前APP里的adminx.py文件里的数据表管理器里设置 order ...
随机推荐
- 「面试」拿到B站的意向书
此次B站服务端开发面试之旅可谓惊险,不过通过对大部分面试题套路的掌握,不出意外还是拿下了,下面我们来看看这些骚题是不是常见的不能再常见的了.这些面试题看了就能面上?当然不是,只是通过这些题让自己知道所 ...
- Win7 64X 安装VisualSVNServer 2.6.0过程中出现Custom action InstallWMISchemaExcute failed: Cannot query proxy blanket: No such interface supported (0x80004002)
Win7 64X 安装VisualSVNServer 2.6.0过程中出现错误:Custom action InstallWMISchemaExcute failed: Cannot query pr ...
- C++中cstring.h和string.h的区别
转载:https://blog.csdn.net/qian_chun_qiang/article/details/80648691 1.string与cstring有什么区别 <string&g ...
- Arduino PID Library
Arduino PID Library by Brett Beauregard,contact: br3ttb@gmail.com What Is PID? PID是什么 From Wikipe ...
- P2652 同花顺
P2652 同花顺 Link 题目背景 所谓同花顺,就是指一些扑克牌,它们花色相同,并且数字连续. 题目描述 现在我手里有 \(n\) 张扑克牌,但它们可能并不能凑成同花顺.我现在想知道,最少更换其中 ...
- Java之线程池解析
线程池 目录 线程池 线程池概述 创建一个线程池并提交线程任务 线程池源码解析 参数认识 构造方法 提交任务 addWorker 执行任务 关闭线程池 线程池概述 什么是线程池 为什么使用线程池 线程 ...
- 结合实体框架(代码优先)、工作单元测试、Web API、ASP. net等,以存储库设计模式开发示例项目。NET MVC 5和引导
介绍 这篇文章将帮助你理解在库模式.实体框架.Web API.SQL Server 2012.ASP中的工作单元测试的帮助下设计一个项目.净MVC应用程序.我们正在开发一个图书实体和作者专用的样例图书 ...
- vue拼图动画Demo
这是一个基于vue的Demo,可以实现拼图动画,但是具体的没有写拼图成功的逻辑,鼠标悬停移动.周期刷新 我把它放到的我的博客园界面上了.刷新界面可以看到. 演示地址 :https://liruilon ...
- TiOps,支持容器,支持多云安全远程运维,疫情期间免费开放,助力远程办公
TiOps,支持多云环境安全远程运维,疫情期间免费对外开放在疫情期间,为减少疾病传染可能性,许多公司的选择了在家远程办公.对于运维来说,既要远程运维,又要保证安全,还要在复杂的IT环境中保持高效,面临 ...
- springMvc配置拦截器无效
说明 springMvc配置国际化拦截器失败,点击页面按钮切换中英文无效,排查发现没有进入 LocaleChangeInterceptor 类中,判断拦截器没有起作用,那么是什么原因导致拦截器无效,通 ...