国际惯例,先用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]
[--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] ...]
[--sort-app-list]
[--throttle MILLISEC] [--randomize-throttle]
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
[--delay-appswitch MILLISEC]
[--launch-app-after-launcher
[--launch-app-after-app MILLISEC PACKAGE_NAME CLASS_NAME]
COUNT
-p 允许的包名列表,可同时指定多个包名,每个包都需要使用“-p”参数指定。指定多个包:
adb shell monkey -p package_1 –p package_2 100
--ignore-crashes 忽视应用 crash 报错,不指定该参数时,应用出现 crash,monkey 会自动停止发送事件,指定该参数后,monkey 会在 crash 后也一直发送事件,直到所有事件发送完成。
--ignore-timeouts 忽视超时导致的错误,即ANR的错误
-s 用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的,方便用于重现 bug。如:
adb shell monkey -p package_name –s 10 100
-v 设定输出信息的详细级别,1个 -v 表示级别为1,2个 -v 表示级别为2
Level 0 : adb shell monkey -p package_name -v 100 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息
Level 1 : adb shell monkey -p package_name -v -v 100 // 提供较为详细的日志,包括每个发送到Activity的事件信息
Level 2 : adb shell monkey -p package_name -v -v -v 100 // 最详细的日志,包括了测试中选中/未选中的Activity信息
--throttle 设定事件之间的延时,单位为毫秒,如:
adb shell monkey -p package_name --throttle 3000 100
延迟3s执行。
日志分析
正常情况,如果Monkey测试顺利执行完成,在log的最后会打印出当前执行事件的次数和所花费的时间;// Monkey finished 代表执行完成
异常情况:
查阅Monkey的输出日志
1. 程序无响应的问题: 在日志中搜索 “ANR”
2. 崩溃问题:在日志中搜索 “Exception”
3. 如果有空指针,搜索“NullPointerException”
4. 如果Monkey执行中断,在log最后也能看到当前执行次数