Monkey 简介
Monkey是``Android中的一个命令行工具,向系统发送伪随机的用户事件流(点击、滑动、Application切换、横竖屏、应用关闭)实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。只针对Activity做测试,不能对Service做测试。
质量要求
版本release(发布)前,Monkey跑出来的结果中crash要为0,final release前,Monkey跑完的总次数应为25W,结果里不允许有NullPointException出现。
命令参数
adb shell命令模式下输入:monkey
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
[--monitor-native-crashes] [--ignore-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
[--pct-permission PERCENT]
[--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
[--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
[--wait-dbg] [--dbg-no-events]
[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
[--port port]
[-s SEED] [-v [-v] ...]
[--throttle MILLISEC] [--randomize-throttle]
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
[--permission-target-system]
COUNT
参数含义:
--hprof:指定该项后在事件序列发送前后会立即生成分析报告,一般建议指定该项
--ignore-crashes:忽略崩溃
--ignore-timeouts:忽略超时
--ignore-security-exceptions:忽略安全异常
--kill-process-after-error:发生错误后直接杀掉进程
--monitor-native-crashes:跟踪本地方法的崩溃问题
--wait-dbg:直到连接了调试器才执行Monkey测试
--dbg-no-events:初始化启动的activity,但是不产生任何事件。
--pct-touch PERCENT:指定触摸事件的百分比:--pct-touch 5%
--pct-motion PERCENT:滑动事件
--pct-trackball PERCENT:轨迹球事件
--pct-nav PERCENT:导航事件up/down/left/right
--pct-majornav PERCENT:主要导航事件back key、menu key
--pct-syskeys PERCENT:系统按键事件Home、Back、startCall、endCall、volumeControl
--pct-appswitch PERCENT:activity之间的切换
--pct-anyevent PERCENT:任意事件
最简单命令
在adb shell模式下执行。
执行1000次monkey点击
monkey 1000
-p 参数
用于约束限制,用此参数指定一个或者多个包,指定包之后,Monkey将只允许启动指定App,如果不指定包,Monkey将启动系统中所有的App。
monkey -p com.example.test 1000
-v 参数
用于指定反馈的信息级别(日志的详细程度),分为三个级别,级别越高,日志越详细。
monkey -p com.example.test -v 1000
monkey -p com.example.test -v -v 1000
monkey -p com.example.test -v -v -v 1000
-s 参数
指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试产生的事件序列也相同。
monkey -p com.example.test -s 30 -v 1000
--throttle 参数
制定每个事件结束后的间隔时间,降低系统压力,单位:毫秒。
如果不指定系统会尽快的发送事件序列。
monkey --throttle 1000
导出测试日志
需退出shell命令,在cmd或bash模式下执行。shell命令相当于进入Linux的root下面,没有权限在里面创建文件。
adb shell monkey -v -v -v 1000 > D:\monkey_log\test.txt
标准流与错误流分开保存
monkey [option] 1>/mnt/sdcard/monkey.txt 2>/mnt/sdcard/error.txt
monkey -v -v -v 1000 1>D:/normal.txt 2>D:/error.txt
停止 Monkey
进入adb shell模式
ps | grep monkey
找出monkey的pid
kill pid
防止 Monkey点击状态栏,虚拟按键
需在开发者选项中打开USB调试(安全设置)
隐藏
adb shell settings put global policy_control immersive.full=*
恢复
adb shell settings put global policy_control null
示例
monkey -p com.android.contacts --throttle 300 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -v -v -v 300000 1>/sdcard/20190409_normal.txt 2>/sdcard/20190409_error.txt