Android Monkey使用详解

Monkey 是Android SDK提供的一个命令行工具,是一个黑盒压力测试工具,采用随机算法,对被测应用随机发送伪随机的用户事件流,如点击,拖拽,滑动,输入等,来确定应用是否会发生异常,并且会产生日志来进行分析,但是测试数据测试事件都是随机的,有一定局限性。

Monkey 适合作为压力或者稳定性测试工具来测试应用的崩溃率、稳定性。但是可以通过二次开发来进行业务流程控制或一定程度上控制测试覆盖。通过多次并且不同设定下的Monkey测试才算是一个稳定性足够的程序。

monkey 命令介绍

adb shell monkey -help

1、基础参数解析

 -p   指定要进行monkey测试的包,如果不使用参数,则会随机选择应用进行测试。

指定一个包:adb shell monkey -p com.fenbi.android.solar 1000

指定多个包:adb shell monkey -p com.fenbi.android.solar -p com.tao.bao 1000

-c   指定activity的category类别

如果用此参数指定了一个或多个类别,则Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。

如果不指定任何类别,则Monkey将选择下列类别中列出的Activity:Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKRY。

如果要指定多个类别,则需要使用多个 -c选项,每个 -c选项只能用于一个类别。

-v   指定日志级别 

level1(-v):缺省值,仅提供启动提示、测试完成和最终结果等少量信息   

level2(-v -v):提供较为详细的日志,包括每个发送到Activity的事件信息

level3( -v -v -v):最详细的日志,包括了测试中选中/未选中的Activity信息

adb shell monkey -p com.shjt.map -v 100
adb shell monkey -p com.shjt.map -v  -v 100
adb shell monkey -p com.shjt.map -v  -v  -v 100

-s   用于指定伪随机数生成器的seed值。如果seed相同,则两次Monkey测试所产生的事件序列也相同的(不指定就会随机生成)。

(所以一般在测试时要记录seed值,以防出现无响应和crash,不容易验证。)

可以通过-s参数复现问题,如:

monkey测试1:adb shell monkey -p com.shjt.map –s 10 100                
monkey测试2:adb shell monkey -p com.shjt.map –s 10 100

--throttle<毫秒>:用于设置每个事件结束后延迟多少时间再继续下一个事件,降低cpu压力;如果不设置,事件与事件之间将不会延迟,事件将会尽快生成;一般设置300ms。

adb shell monkey -p com.shjt.map --throttle 300 100

2、调试参数解析

--ignore-crashes:用于指定当应用程序崩溃(Crash)时,Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,monkey依然会发送事件,直到事件计数完成。

--ignore-timeouts :用于指定当应用程序发生无响应ANR)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

--ignore-native-crashes:如果使用此参数,则忽略native层代码的崩溃。

--ignore-security-exceptions :用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。

--monitor-native-crashes:用于指定是否监视并报告native层发送的崩溃代码。

--kill-procress-after-error:用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。

--hprof:该选项设置后,将会在monkey事件序列前后立刻生成report,大小为大于5MB,存储在/data/misc

3、事件类型

  monkey在发送伪随机事件时,是有不同的类型的。默认随机分配比例,也可以指定其百分比。如果不设置,则--pct-anyevent总量100%,也就是纯随机事件;可以单参数设置百分比,也可以多参数设置百分比,但百分比的总量不能大于100%

# 单个参数设置百分比
adb shell monkey -p com.huomaotv.com --pct-appswitch 20 1000

# 多个参数设置百分比
adb shell monkey -p com.huomaotv.mobile --pct-appswitch 20 --pct-rotation 20 --pct-touch 30 --pct-motion 20 1000

在实际工作中,如果简单跑一下稳定性没有必要修改这些参数。如果想测试更精确一些,让 monkey 测试过程中减少一些无效的事件,可以根据项目 App 的特性调整事件的比例。

比如常见的应用中触摸和滑动的操作肯定是最频繁的,那么相对可以提高这两种事件的比例;或者如游戏和视频类的 App,会存在横竖屏切换的操作,就适当增加屏幕旋转事件的比例。

0:--pct-touch <percent>:设置触摸事件的百分比。触摸事件(down-up)是指在屏幕上的一个单独位置的一次点击/抬起的事件。

1:--pct-motion <percent>:设置滑屏的百分比设置。手势事件是由一个在屏幕某处的按下事件(down)、一系列的伪随机移动、一个抬起事件(up)组成)即一个滑动操作,但是是直线的,不能拐弯

3:--pct-trackball <percent>:设置轨迹球事件百分比。轨迹球事件包括一个或多个随机移动,有时还伴有点击。(不常使用参数,但滚动球事件中包含曲线滑动事件,在被测程序需要曲线滑动时可以选用此参数。)

4:--pct-rotation:旋转屏幕。

6:--pct-nav:设置导航按键事件的百分比。导航事件由方向输入设备的上下左右按键所触发的事件组成(不常用参数)。

7:--ptc-majornav:设置主导航事件的百分比。((如中间键、取消、确定或菜单引发的图形接口的动作))。

8:--pct-syskeys:设置系统物理按键事件百分比,比如home键,音量键,返回键,拨打电话键,挂电话键等。

9:--pct-appswitch:调整启动activity的百分比。在随机间隔中,执行一个startActivity()方法调用,作为一种最大化的覆盖安装包的所有的activity的方法,保证界面的覆盖情况。

10:--pct-flip:键盘翻转。

11:--ptc-anyevent:设置其它事件百分比,比如按键或其他不太常用到的一些事件的百分比(不常用参数)。

将monkey日志输出到文件:

adb shell monkey -p xxx.xxxx.xxx  -v -v 100 > E:monkeyLog.txt

日志报告分析

可参考:https://www.cnblogs.com/kekouwen/archive/2018/11/21/9995635.html

该博文分别讲述了如何初步、详细分析日志、内存泄漏等问题。

 

参考:https://www.cnblogs.com/dreamyu/p/11716925.html

参考:https://www.cnblogs.com/smallstone2018/p/10024500.html

参考:https://www.cnblogs.com/yuntimer/p/10779617.html

原文地址:https://www.cnblogs.com/Maruying/p/13635906.html