目录结构
一、Monkey概述
1. Moneky启动路径
2. Monkey启动步骤
二、monkey参数
1. 常规类参数
1)帮助参数
2)日志参数
2. 事件类参数
1)执行指定脚本
2)伪随机数生成种子值
3)设置间隔
4)调整触摸事件所占百分比
5)调整手势事件百分比
6)调整应用启动事件的百分比
7)调整屏幕旋转事件百分比
3. 约束类参数
1)包约束
2)activity类约束
4. 调试类参数
1)应用程序崩溃后继续发送事件
2)超时错误继续发送事件
3)应用程序权限错误发生后继续发送事件
三、Monkey参数命令实践案例
一、Monkey概述
Monkey可在Android系统中用来对被测程序进行压力测试,检查和评估被测程序的稳定性
1. Moneky启动路径
Monkey是Android系统自带的,其启动脚本位于Android系统/system/bin目录的Monkey文件,其jar包位于Android系统/system/framework目录的Monkey.jar文件。用户主要通过adb命令启动Monkey,Monkey在运行时会根据命令行参数的配置生成伪随机的事件流(点击、触摸、手势),并在Androidi设备上执行对应的测试事件
同时,Monkey还会对测试系统进行监测,当出现以下4种情况时会进行特殊处理:
①限定了Monkey只能运行在特定包上,当监测到试图转到其他包的操作,将对其进行阻止
②应用程序崩溃or接收到任何失控异常,Monkey将记录对应的错误日志,并根据命令行参数判断是停止运行还是继续运行
③应用程序发生了程序无响应(application not responding),Monkey将记录对应的错误日志,并根据命令行参数判断是停止运行还是继续运行
④按照选定的不同级别的反馈信息,在Monkey中可看到其执行过程报告和生成的事件
操作事件简介:
Monkey所执行的随机事件流中包含11大事件,分别是:触摸事件、手势事件、二指缩放事件、轨迹事件、屏幕旋转事件、基本导航事件、主要导航事件、系统按键事件、启动Activity事件、键盘事件、其他类型事件。Monkey通过这11大事件来模拟用户的常规操作,对手机App进行稳定性测试
2. Monkey启动步骤
(1)连接移动设备:adb connect 127.0.0.1:62001
(2)连接成功后输入命令:adb shell
(3)进入指定目录:cd /system/bin
(4)输入monkey
命令,检查是否启动成功
强制关闭Monkey:
(1)查看全部在运行的进程:adb shell ps
(2)查找出com.android.commands.monkey进程的PID:adb shell ps | find "monkey"
(3)终止Monkey进程:adb shell kill {PID}
monkey命令:
adb shell monkey [options]
[options]
:monkey可传入的参数,可选项。若不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包)
:随机发送事件数,必选项。若输入100,则表示执行100个伪随机事件
e.g.:
# 对指定APP包随机发送10次伪随机事件
adb shell monkey -p com.tencent.mm -v 10
# 对Android设备中的包随机发送一共10次伪随机事件
adb shell monkey 10
具体参数可参看官方文档:http://www.android-doc.com/tools/help/monkey.html
二、monkey参数
Monkey参数分类:常规类参数、事件类参数、约束类参数、调试类参数
1. 常规类参数
包括:帮助参数+日志信息参数
1)帮助参数
帮助参数用于输出Monkey命令使用指导
# 帮助类参数
monkey -h
2)日志参数
日志信息参数将日志分为三个级别,级别越高,日志的信息越详细
# 日志级别
adb shell monkey -v
-v:打印出日志信息,每个-v将增加反馈信息的级别;-v越多日志信息越详细,不过目前最多支持3个-v
e.g.:
adb shell monkey -v -v -v 1000
第一个-v:0级,除启动提示、测试完成和最终结果外提供较少信息
第二个-v:1级,提供较详细测试信息,如逐个发送到Activity
第三个-v:2级,提供更详细安装信息,如测试中被选中或未被选中的Activity
-v之后的1000:表示随机事件数
PS:以上详细等级,一般使用0-1级即可
2. 事件类参数
事件类参数的作用是对随机事件进行监控,从而使其遵循设定的规则运行,如设置的各种事件的百分比、设置时间生成所使用的种子值
频率参数主要限制事件执行的时间间隔
1)执行指定脚本
语法:adb shell monkey -f
e.g.:adb shell moneky-f /mnt/test007/001
2)伪随机数生成种子值
使用-s命令可以重复执行之前的伪随机操作,每次执行伪随机事件操作会默认生成一个seed值
语法:adb shell monkey -s
e.g.:adb shell monkey -s 777 100
3)设置间隔
每个指令之间加上固定的时间间隔,可用--throttle
语法:adb shell monkey --throttle
4)调整触摸事件所占百分比
使用:--pct-touch
语法:adb shell monkey --pct-touch
e.g.:adb shell -v -v --pct-touch 100 200
5)调整手势事件百分比
语法:adb shell monkey --pct-motion
e.g.:adb shell monkey -v -v --pct-motion 90 200
6)调整应用启动事件的百分比
启动事件:activity launches,打开应用。通过调用startActivity()方法最大限度地开启package下的所有应用
语法:adb shell monkey --pct-appswitch
7)调整屏幕旋转事件百分比
语法:adb shell monkey --pct-rotation
3. 约束类参数
1)包约束
-p后面可接一个or多个包名,若不指定包名则monkey将启动系统中全部包的activity
语法:adb shell monkey -p
e.g.:
adb shell monkey -p com.tencent.mm 200
2)activity类约束
将monkey限制在一个or几个类别中
语法:adb shell monkey -c
e.g.:adb shell monkey -c Internet.CATEGORY_LAUNCHER 1000
4. 调试类参数
1)应用程序崩溃后继续发送事件
--ignore-crashes
2)超时错误继续发送事件
--ignore-timeouts
3)应用程序权限错误发生后继续发送事件
--ignore-security-exceptions
三、Monkey参数命令实践案例
测试场景
对某个APP(考研帮APP Android版)进行测试,通过Monkey模拟用户的随机操作,检查被测应用是否会出现异常(如:应用包括or无响应)
需求分析
(1)指定应用:需要使用-p指定被测app包名(com.tal.kaoyan)
(2)测试目的:模拟用户操作,让Monkey执行的事件尽可能接近用户的常规操作,最大限度发现用户使用过程中可能出现的问题。需要对Monkey执行的事件百分比做一些调整:
①触摸事件和手势事件是用户最常见的操作,通过--pct-touch、--pct-motion分别将这两个事件的占比调整到40%、25%;
②目标应用包含了多个Activity,为了能覆盖大部分Activity,通过--pct-appswitch将Activity切换的事件占比调整到10%;
③被测应用在测试中出现过不少横竖屏之间切换的问题,这个场景也需要关注,通过--pct-rotation把横竖屏切换事件占比调整到10%
(3)指定seed值:使用-s参数来指定命令执行的seed值,测试过程发现问题时,便于进行问题复现。Monkey会根据seed值来生成对应事件流,同一个seed值生成的事件流是完全相同的
(4)控制时间间隔:使用--throttle控制Monkey每个操作之间的时间间隔,能更接近用户的操作场景,同时防止在较低端手机上过于频繁的操作而导致系统崩溃。通过--throttle设置Monkey每个操作固定延迟0.4s
(5)控制程序异常时继续执行:使用--ignore-crash、--ignore-timeouts参数,发生异常(程序崩溃or无响应)时能继续执行在执行,让Monkey能在日志中记录相关信息,并继续执行后续测试
(6)指定日志详细级别:使用-v指定log的详细级别,Monkey的日志输出有3个级别,日志的级别越高则详细程度也越高。为便于问题定位,将日志设为1级( -v -v)
操作过程
1. 在Android模拟器中安装考研帮APP
# 连接Android模拟器
adb connect 127.0.0.1:62001
# 安装指定APP,push到Android模拟器设备中
adb install C:\Users\Administrator\Desktop\kaoyanbang_3.3.7beta.243.apk
2. 连接adb shell,查询被测APP的包名
adb shell
pm list package | grep "kaoyan"
获得包名:com.tal.kaoyan
3. 根据需求分析配置符合规则的测试命令
adb shell monkey -p com.tal.kaoyan --pct-touch 40 --pct-motion 25 --pct-appswitch 10 --pct-rotation 10 -s 1666 --throttle 400 --ignore-crashes --ignore-timeouts -v -v 200
在保持与Android模拟器连接状态下(无须进入adb shell),执行以上命令:
以上,通过Event percentages可查看所设置的事件百分占比