Monkey是什么?
Monkey 是安卓官方提供的一个命令行工具,可以运行在Android模拟器和实体手机上。通过Monkey 来模拟用户的触摸、点击、滑动、系统按键的操作,来对APP进行压力测试、稳定性测试。换句话说,就是在乱点一通的情况下,来验证APP程序的稳定性。
Monkey主要作用
通过发送伪随机的用户事件流,在压力情况下来验证app的稳定性。Monkey主要用来发现崩溃、无响应等影响用户使用的问题。
Monkey执行原理
Monkey 的局限
1、一般只适用于Android 的app;
2、执行的操作随机,只能控制比例;
本文给大伙介绍Monkey的详细命令和使用参数。
Monkey命令主要分为基本参数、事件类、调试类。
Monkey基本参数
-h:打印帮助信息。如下图,把monkey支持的所有命令及参数都打印出来了,在你一时想不起命令的时候可以参考。
-v:指定打印信息的详细级别,一个 -v增加一个级别 , 默认级别为 0 。最多支持-v -v -v,也就是最详细的日志输出。
-p:指定运行的包名。指定包之后,monkey将只允许系统启动指定的app。如果指定多个包,需要使用多个-P。
-s:用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的
--throttle:每个事件结束后的间隔时间。如:--throttle 100
Monkey 命令大全如下图:
Monkey事件类命令
事件类命令是Monkey最重要的命令,共11个事件类命令。
--pct-touch:指定触摸事件的百分比,如:--pct-touch 5%
--pct-motion
--pct-trackball
--pct-nav
--pct-majornav
--pct-syskeys
--pct-appswitch
--pct-anyevent
--pct-flip
--pct-pinchzoom
--pct-rotation
备注:轨迹球事件、导航事件、主要导航事件这三个事件已经很少用了。
Monkey调试类命令
--dbg-no-events:初始化启动的activity,但是不产生任何事件。
--ignore-crashes:忽略崩溃
--ignore-timeouts:忽略超时
--ignore-security-exceptions:忽略安全异常
--kill-process-after-error:发生错误后直接杀掉进程
--monitor-native-crashes:跟踪本地方法的崩溃问题
--wait-dbg:知道连接了调试器才执行monkey测试
简单命令实例:
adb shell monkey -p com.netease.cloudmusic -v 10 对指定应用跑10条事件
简单命令
复杂命令实例:
该命令也是对指定应用跑10条事件,只不过我自己指定了一系列的参数(参数记不住,可以去我的山一篇文章)
复杂命令
指定保存路径:
保存路径
注意点:
1、命令不是写的越复杂越好,需要根据自己的需要来设计;
2、实际跑monkey的事件数肯定时巨大的(我这里做参考只用了10条事件做例子);
3、事件的时间间隔尽量设置在300-500ms ,这个比较贴近实际使用;
4、跑monkey时,手机上尽量不要有购物、支付之类的软件,不然你会后悔的,哈哈
结果分析
adb shell monkey -p com.netease.cloudmusic -v 10 运行结果如下图,我们对着结果图来分析。
monkey执行结果
第一个框就是我们发出的指令 adb shell monkey -p com.netease.cloudmusic -v 10 。
第二个框seed就是时间序列的种子值,可以通过 -s参数指定,count就是执行的事件多少,也是我们指定的。
第三个框AllowPackage 我们运行的包名。 这是网易云音乐的包名。
第四个框是允许跑的Category,通过-c参数指定,没有指定的话默认是
android.intent.category.LAUNCHER和android.intent.category.Monkey。
第五个框是11个事件类型的比例,没有指定的话就随机分配。如果记不住的话可以看我上一篇的文章,有详细解释。
第六个框就是执行的日志,发送的事件的记录。
第七个框就是monkey正常结束。
通过上面的描述,大伙应该有一个初步的理解了。可能有小伙伴会说了解是了解了,但是最重要的是我怎么知道这个monkey跑出了问题呢。我们一起来看戏对结果日志中的问题分析。
Monkey测试结果的异常分类:
1、crash 闪退崩溃
2、exception 异常
3、anr无响应
4、force close强制退出
过滤方法:
跑一晚上的Monkey跑出来的测试结果日志可能有几十M的文件,要一条一条看过去肯定会疯掉的。最简单直接的方法就是过滤关键字,比如我想看下测试结果里有没有崩溃,那就直接在测试结果里过滤关键字 crash ;我想看下测试结果里有没有ANR,就直接过滤下关键字ANR。
crash日志:
crash日志
ANR日志:
问题提交和回归
问题发现了,问题日志也有了,就可以直接提问题单给开发修改问题啦。这里要注意下,跑monkey的seed值,一定要记住。在问题回归的时候,这个参数要和之前的一致,才能保证monkey执行的操作和之前的一致,才有回归的意义。
欢迎大家共同探讨学习,共同进步。