为啥要进行稳定性测试
1、APP崩溃率过高,但是日常功能测试、系统测试均无法将崩溃、anr提前暴露,
2、稳定性测试可以观察在:一个运行周期内、一定的压力条件下,
软件的出错机率、性能劣化趋势等。进而大大减少软件上线后的崩溃卡死等现象,为软件的逐步优化提供方向及验证。
稳定性测试包含啥
稳定性测试一般包括压力测试、容错测试、兼容性测试等多种测试方式,以满足APP的稳定性和可靠性要求。稳定性测试的主要目的是检测APP的缺陷和漏洞,为开发者提供改进和优化的方向
举个栗子:
adb shell monkey -p com.xxx.xx(被测应用包名) --pct-touch 30 --pct-motion 30 --pct-nav 10 --pct-majornav 15 --pct-appswitch 10 --pct-anyevent 5 --pct-trackball 0 --pct-syskeys 0 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --throttle 200(每个时间之间的间隔,单位ms) -s 123456 -v 6000(monkey事件的次数)> ~/Downloads/crash.txt
参数介绍
-p:包名
-s 随机生成seed值,避免每次都执行monkey的路径一致
-v 6000 点击6000次,这里的v是设置日志级别,默认是一个-v,如需更详细的日志可以加多一个-v,最多3个-v
>~/Downloads/crash.txt. 存放的地址
—pct-touch 30% 点击触摸事件30%
—pct-motion 30% 滑动事件30%
--pct-trackball轨迹球事件30%
–pct-majornav 主要导航事件百分比
–pct-pinchzoom 缩放事件百分比
–pct-nav 基本导航事件百分比(来自于方向输入设备的上下左右操作)—用的少
–pct-majornav 主要导航事件百分比 (即Navigation Bar的确认,菜单,返回键等)
–pct-syskeys:系统按键事件(系统保留按键,如HOME键,BACK键,拨号键,挂断键,音量键)
–pct-appswitch:应用启动事件--这种事件偏低
–pct-anyevent:其他未提及事件
--pct-rotation 屏幕旋转事件
--pct-flip 键盘事件(主要是指一些与键盘相关的操作。如点击输入框、键盘弹起、点击输入框以外区域、键盘收回等)
--throttle 每个事件固定延迟毫秒
--ignore-crashes。(通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。)
--ignore-timeouts
通常,当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。
如何通过脚本运行monkey
adb shell monkey -f 指定脚本路径path 次数
adb shell monkey -f E:\test 10
maxim使用
原理:Maxim是基于 Android Monkey 二次开发,实现高速点击的 Android Monkey 自动化工具 fastmonkey - 代号 Maxim
相关资料:https://testerhome.com/topics/11719
为啥使用fastmonkey?
1、速度快 ,每秒10-15个action事件(界面控件解析算法通过改造底层 framework,直接使用 AccessibilityNodeInfo 并优化减化其调度流程,解析速度控制在 50ms 内,可对界面变化做快速反应。)
2、防止跳出APP(控件解析时获取进程推栈 Top Activity,按非白即黑立即执行切回。各事件执行时按特有逻辑屏蔽掉状态栏,防止误操作)
3、防止休眠(休眠时自动检测并唤醒屏幕。)
4、熔断机制(当事件按某个特有模式固定执行一段时间时则自动触发熔断开始自拉活,防止假死。如重复点击同一位置 n 秒。)
5、场景细粒度(引入 Activity 黑白名单,可控制限定在某些场景内。如只测试某几个相关页面)
6、随机自动输入:检测当遇到可输入模式时,按设定(ape.string)或随机输入键盘事件。如输入 666 或 2333 弹幕 。随机输入 需要提前安装 adbkeyboard https://github.com/senzhk/ADBKeyBoard
7、崩溃堆栈自动保存;当崩溃(crash、oom)发生时自动抓取,并存于/sdcard/crash-dump.log
8、多平台多系统兼容 5-9(可以下载)
9、轻量极简
如何使用maxim
1、在github:https://github.com/zhangzhao4444/Maxim,下载framework.jar,monkey.jar
2、将framework.jar和monkey.jar push进入手机的/sdcard目录下
adb push framework.jar /sdcard
adb push monkey.jar /sdcard
3、执行cmd命令
adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p XXX(APPID) —uiautomatormix(策略模式) —running-minutes 60(运行时间) - v -v —throttle 400 —output-directory /sdcard/XX/
参数解说
1、tv.panda.test.monkey.Monkey 主调入口。无需修改
2、-p com.duowan.xunhuan 待测appid
3、策略模式
--uiautomatormix 混合模式(70% 控件解析随机点击,其余 30% 按原 Monkey 事件概率分布)
--pct-uiautomatormix n 可自定义混合模式中控件解析事件概率(类似--pct-nav 5%)
--uiautomatordfs DFS 深度遍历算法(优化版)(注 Android5 不支持 dfs)
--uiautomatortroy Troy 模式 ( 1first 2select 3last 并屏蔽 black 来执行遍历操作)
4、采用崩溃回溯截图:运行时 shell 增加 --imagepolling 参数,开启崩溃回溯截图、关闭原截图逻辑
当崩溃发生时 进行截图保存,实现可回溯崩溃场景,默认会在 /sdcard/crash_$timestamp/图
因此需要配置 max.config
max.takeScreenShot = true 开启截图
max.flushImagesThreshold =xx 回溯区间大小 xx 张
max.savePageSource = true 保存 xml
截图的生效条件: throttle > 200 && max.takeScreenShot = true && —imagepolling
5、将日志、截图、crash、anr traces,pagesources.xml 保存在output目录。--output-directory /sdcard/XXX
如何分析日志
程序无响应的情况:搜索关键字ANR in
崩溃的情况1:搜索关键字CRASH
崩溃的情况2:搜索关键字Exception
Jenkins自动化配置持续集成获取崩溃日志
通过服务器远程adb connect ip 连接到手机,将新包安装到该手机,并执行monkey脚本后,将崩溃日志上传到workspace,生成构建后文档,直接下载此文件即可获得崩溃日志
相关配置:https://www.cnblogs.com/-lisunman/p/13932642.html
—后记 crash和ANR区别
ANR :application not running 。页面停止响应,弹出dialog提示程序无响应。
原因:主要是由耗时操作导致,大体为:网络操作,文件/数据库的读写
缓解ANR的方法:多开线程,避免在主线程做耗时操作,尽量其他线程处理完再返回给主线程。
crash:奔溃。弹出dialog提示用户应用已崩溃。
原因:异常的出现,并且没有捕获到