Monkey主要是用来对软件的稳定性与压力测试的工具。它会模拟用户向手机发送伪随机事件。

保存Monkey结果
保存在PC中    adb shell monkey [option] <count> > /local/monkey.txt
保存在手机中 monkey [optinon] <count> > /mnt/sdcard/monkey.txt
标准流与错误流分开保存 monkey [optinon] <count> 1> /mnt/sdcard/monkey.txt 2> /mnt/sdcard/error.txt
Monkey测试参数
Monkey向命令行打印输出的log信息级别
默认级别0:-v 只打印启动信息,测试完成信息和最终结果信息
级别1:-v -v 打印执行时的一些信息,如发送事件
级别2:-v -v -v 打印最详细信息
-p <允许执行的包名列表>
-c <意图的种类> 主要用于测试没有桌面图标的应用 -c 后面添加catory
-s <随机数种子> 如果用相同的seed值再次运行Monkey,它将生成相同的事件序列
--throttle <毫秒> 在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。

--pct-touch <percent>调整触摸事件的百分比
--pct-motion <percent>调整动作事件的百分比
--pct-trackball <percent> 调整轨迹事件的百分比
--pct-nav <percent> 调整“基本”导航事件的百分比
--pct-majornav <percent> 调整“主要”导航事件的百分比
--pct-syskeys <percent>调整“系统”按键事件的百分比
--pct-appswitch <percent>调整启动Activity的百分比。
--pct-anyevent <percent> 调整其它类型事件的百分比。


--hprof 设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(~5Mb)
--ignore-crashes 如果设置此选项,当发生崩溃的时候Monkey将继续向系统发送事件,直到计数完成
--ignore-timeouts 如果设置此选项,当发生AMR的时候Monkey将继续向系统发送事件,直到计数完成
--ignore-security-exceptions如果设置了此选项,当发生权限问题的时候Monkey将继续向系统发送事件,直到计数完成
--ignore-native-crashes 当发生C++/C层发生错误的时候Monkey将继续向系统发送事件,直到计数完成

白名单和黑名单要push到手机中的/data/local/tmp
--pkg-blacklist-file PACKAGE_BLACKLIST_FILE(文件路径) 添加到黑名,位于黑名单中的引用将不进行测试
--pkg-whitelist-file PACKAGE_WHITELIST_FILE(文件路径) 添加到黑名,位于黑名单中的引用将不进行测试
如何组合测试参数

上面介绍了很多的参数,大家并不需要记住,需要用的时候直接使用adb shell monkey -help即可输出,但是还是要牢记这些参数的意义的,参数这么多我们要怎么确定这些参数呢?
一般我们会根据我们需要测试的目的进行对测试事件百分比进行分配。并且还要结合要复现的问题进行忽略设计,有时候还得考虑某些应用如果随意测试会产生某些不良影响的时候还需要考虑到把这些应用添加到黑名单中。
总之这些参数要怎么设置需要结合实际需求来决定。

常见事件
事件0 --pct-touch
:Sending Touch (ACTION_DOWN): 0:(299.0,255.0)
:Sending Touch (ACTION_UP): 0:(302.0262,250.57063)
事件1 --pct-motion
:Sending Touch (ACTION_DOWN): 0:(328.0,220.0)
:Sending Touch (ACTION_MOVE): 0:(317.66824,217.7649)
:Sending Touch (ACTION_MOVE): 0:(315.09308,217.11836)
:Sending Touch (ACTION_MOVE): 0:(304.76135,214.29372)
:Sending Touch (ACTION_UP): 0:(291.04208,211.98477)
事件3 --pct-trackball
:Sending Trackball (ACTION_MOVE): 0:(0.0,1.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(1.0,1.0)
事件4--pct-pinchzoom
:Sending Touch (ACTION_DOWN): 0:(487.0,209.0)
:Sending Touch (ACTION_POINTER_DOWN 1): 0:(486.9106,205.45831) 1:(194.0,366.0)
:Sending Touch (ACTION_MOVE): 0:(484.5785,183.66449) 1:(206.95853,375.98056)
:Sending Touch (ACTION_MOVE): 0:(471.26563,161.93521) 1:(218.35042,380.1656)
:Sending Touch (ACTION_MOVE): 0:(457.90872,153.87688) 1:(222.07701,383.26407)
:Sending Touch (ACTION_MOVE): 0:(452.51602,142.13242) 1:(242.29489,384.48602)
:Sending Touch (ACTION_MOVE): 0:(444.63513,124.26505) 1:(255.93825,391.4393)
:Sending Touch (ACTION_MOVE): 0:(444.01697,120.63037) 1:(273.75214,395.4244)
:Sending Touch (ACTION_MOVE): 0:(434.89807,117.38953) 1:(294.31616,402.74707)
:Sending Touch (ACTION_POINTER_UP 1): 0:(428.31845,98.71772) 1:(294.42966,402.80002)
:Sending Touch (ACTION_UP): 0:(415.8634,86.58714)
事件5 --pct-nav
:Sending Key (ACTION_UP): 19 // KEYCODE_DPAD_UP
:Sending Key (ACTION_DOWN): 20 // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 21 // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_DOWN): 22 // KEYCODE_DPAD_RIGHT
事件6 --pct-majornav
:Sending Key (ACTION_DOWN): 82 // KEYCODE_MENU
:Sending Key (ACTION_DOWN): 23 // KEYCODE_DPAD_CENTER
事件7 --pct-syskeys
:Sending Key (ACTION_DOWN): 4 // KEYCODE_BACK
:Sending Key (ACTION_DOWN): 5 // KEYCODE_CALL
:Sending Key (ACTION_DOWN): 25 // KEYCODE_VOLUME_DOWN
:Sending Key (ACTION_DOWN): 24 // KEYCODE_VOLUME_UP
:Sending Key (ACTION_UP): 3 // KEYCODE_HOME
事件8 --pct-appswitch
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.android.calendar/.AllInOneActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.calendar/.AllInOneActivity } in package com.android.calendar
事件9 --pct-flip
:Sending Flip keyboardOpen=true
:Sending Flip keyboardOpen=false
事件10 --pct-anyevent
:Sending Key (ACTION_DOWN): 128 // KEYCODE_MEDIA_CLOSE
:Sending Key (ACTION_UP): 128 // KEYCODE_MEDIA_CLOSE
:Sending Key (ACTION_DOWN): 57 // KEYCODE_ALT_LEFT
:Sending Key (ACTION_UP): 57 // KEYCODE_ALT_LEFT
:Sending Key (ACTION_DOWN): 9 // KEYCODE_2
:Sending Key (ACTION_UP): 9 // KEYCODE_2
:Sending Key (ACTION_DOWN): 61 // KEYCODE_TAB
:Sending Key (ACTION_UP): 61 // KEYCODE_TAB
事件11:--pct-rotation 屏幕旋转百分比 隐藏事件
:Sending rotation degree=0, persist=true
:Sending rotation degree=1, persist=false
:Sending rotation degree=2, persist=true
:Sending rotation degree=3, persist=false

延时事件:
Sleeping for 0 milliseconds
事件结果报告
// Seeded: 1435740661667         随机种子
// Event percentages:
// 0: 16.0% 事件0:--pct-touch
// 1: 9.0% 事件1:--pct-motion
// 2: 2.0% 事件2:--pct-pinchzoom
// 3: 15.0% 事件3:--pct-trackball
// 4: -0.0% 事件4:--pct-rotation
// 5: 25.0% 事件5: --pct-nav
// 6: 15.0% 事件6:--pct-majornav
// 7: 2.0% 事件7:--pct-syskeys
// 8: 2.0% 事件8: --pct-appswitch
// 9: 1.0% 事件9:--pct-flip
// 10: 13.0% 事件10:--pct-anyevent

所有事件跑完结束:
Events injected: 100
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=270ms (0ms mobile, 0ms wifi, 270ms not connected)
// Monkey finished

遇到异常结束:
** Monkey aborted due to error.
Events injected: 1744
:Sending rotation degree=0, persist=false
:Dropped: keys=3 pointers=8 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=55269ms (0ms mobile, 0ms wifi, 55269ms not connected)
** System appears to have crashed at event 1744 of 10000 using seed 1435753466327
Contents
  1. 1. 保存Monkey结果
  2. 2. Monkey测试参数
  3. 3. 如何组合测试参数
  4. 4. 常见事件
  5. 5. 事件结果报告