正如上一篇文章介绍的,Monkey是通过adb命令来启动的,并且在运行时根据命令行参数的配置生成伪随机的事件流,在Android设备上执行。
本篇文章就来介绍一下启动Monkey时的参数,以及Monkey会执行哪些事件。
Monkey的启动脚本是Android系统的system/bin目录的Monkey文件,jar包是位于Android系统的/system/framework目录的Monkey.jar文件。
1、Monkey参数
Monkey启动的命令行脚本为monkey [options] <count>
。其中:
- options表示Monkey执行的可配置参数,是可选项;如果不指定,则以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包;
- count表示Monkey执行的事件数,为必选项;
options可简单划分为五类,以下进行详细介绍。
1.1 基本配置类参数
Monkey的基本配置类参数包括帮助参数和日志信息参数:
- 帮助参数
--help
:用于输出Monkey命令使用指导 - 日志信息参数
-v
:将日志分为三个级别,级别越高,日志的信息越详细
1.2 事件类型和频率参数
- 事件类参数:对随机事件进行调控,从而使其遵照设定运行,如设置各种事件的百分比
--pct-xxx <百分比>
、设置事件生成所使用的种子值-s <seed>
等; - 频率参数
--throttle <毫秒数>
:限制事件执行的时间间隔;
1.3 约束限制类参数
约束限制类参数的作用是将随机事件运行的范围限制在一个或多个包-p <包名>
或类-c <类名>
中
1.4 调试类参数
通过调试类参数,可以进行简单的调试,快速定位执行过程中的一些问题,如:
-
--dbg-no-events
监控应用程序所调用的包之间的转换 -
--hprof
监控内存泄漏
1.5 官方隐藏类参数
在Android官网上还有三个参数是看不到说明的,即为隐藏参数:
-
--pkg-blacklist-file <黑名单文件>
限制Monkey不测试指定黑名单文档中记录的包,如果没有这个参数,Monkey会测试系统内所有的包,黑名单文档中每一行只能放一个包名; -
--pkg-whitelist-flie <白名单文件>
限制Monkey只测试指定白名单文档中记录的包,如果没有这个参数,Monkey会测试系统内所有的包,如果要测试的包与其它的包有关联,必须一起指定这些包; -
-f <脚本文件>
指定Monkey执行用户自定义的脚本文件
2、Monkey事件
Monkey所执行的随机事件流中包含11大事件,Monkey就是通过这11大事件来模拟用户的常规操作,对手机APP进行稳定性测试。
我们经常在参数中修改事件百分比的事件如下:
- 触摸事件
--pct-touch
:指在屏幕某处按下并抬起对操作,相当于点击屏幕,可通过--pct-touch <百分比>
配置其事件百分比,以下事件也是如此; - 手势事件
--pct-motion
:指在屏幕某处的按下、随机移动、抬起的操作,即直线滑动操作; - 二指缩放事件
--pct-pinchzoom
:指在屏幕上的两处同时按下,并同时移动,最后同时抬起的操作,即放大缩小手势操作; - 系统按键事件
--pct-syskeys
:指点击系统保留使用的按键的操作,如点击Home键、返回键、音量调节键等; - 启动Activity事件
--pct-appswitch
:指在手机上启动一个Activity的操作; - 键盘事件
--pct-flip
:一些与键盘相关的操作,比如点击输入框、键盘弹起、点击输入框以外的区域、键盘收回等;
不常用的事件如下:
- 屏幕旋转事件
--pct-rotation
:也是一个隐藏事件,模拟Android手机的横屏和竖屏切换; - 基本导航事件
--pct-nav
:现在手机上很少有上、下、左、右按键,一般用的比较少; - 主要导航事件
--pct-majornav
:指点击“主要导航”按键的操作,这些按键通常会导致UI界面中的动作,如中间键、回退按键、菜单按键等; - 轨迹事件
--pct-trackball
:轨迹球事件中包含曲线滑动操作,现在的手机几乎都没有轨迹球; - 其他类型事件
-pct-anyevent
:如按键、其他不常用的设备上的按键等;
3、Monkey监测
Monkey在Android设备上执行时,还会对系统进行监测,当出现以下三种情况时,会进行特殊处理:
- 如果限定了Monkey运行在特定包上,当监测到有试图转到其他包的操作,将会对其进行阻止;
- 如果应用程序崩溃或接收到任何失控异常,Monkey将记录对应的错误日志,使用
--ignore-crash
参数使Monkey遇到意外时继续执行; - 如果应用程序发生了程序无响应(ANR)的错误,Monkey将记录对应的错误日志,使用
--ignore-timeouts
参数没有响应时继续执行;