Monkey日志信息的12种Event percentages(2021.8.5更新)
文章是2015年写的,现在2021年event事件已经是12种了,网上搜了下,还都是11种,都没人更新了。
我们查看官方文档,表里只给出了8种事件(可以看我上篇的翻译文档)。但我们运行Monkey后,却发现有12种事件!最坑爹的是,在每种事件的百分比后面,他还不给注明是什么事件!
原来不同的Android SDK中的Event percentages种类数和顺序是不一样的!
我们可以查看MonkeySourceRandom.java中定义的这些值:
https://android.googlesource.com/platform/development/+/master/cmds/monkey/src/com/android/commands/monkey/MonkeySourceRandom.java
1 public static final int FACTOR_TOUCH = 0; 2 public static final int FACTOR_MOTION = 1; 3 public static final int FACTOR_PINCHZOOM = 2; 4 public static final int FACTOR_TRACKBALL = 3; 5 public static final int FACTOR_ROTATION = 4; 6 public static final int FACTOR_PERMISSION = 5; 7 public static final int FACTOR_NAV = 6; 8 public static final int FACTOR_MAJORNAV = 7; 9 public static final int FACTOR_SYSOPS = 8; 10 public static final int FACTOR_APPSWITCH = 9; 11 public static final int FACTOR_FLIP = 10; 12 public static final int FACTOR_ANYTHING = 11; 13 public static final int FACTORZ_COUNT = 12; // should be last+1 14 private static final int GESTURE_TAP = 0; 15 private static final int GESTURE_DRAG = 1; 16 private static final int GESTURE_PINCH_OR_ZOOM = 2;
然后再来看Monkey.java源码中的processOptions()方法
https://android.googlesource.com/platform/development/+/master/cmds/monkey/src/com/android/commands/monkey/Monkey.java
1 /** 2 * Process the command-line options 3 * 4 * @return Returns true if options were parsed with no apparent errors. 5 */ 6 private boolean processOptions() { 7 // quick (throwaway) check for unadorned command 8 if (mArgs.length < 1) { 9 showUsage(); 10 return false; 11 } 12 try { 13 String opt; 14 Set<String> validPackages = new HashSet<>(); 15 while ((opt = nextOption()) != null) { 16 if (opt.equals("-s")) { 17 mSeed = nextOptionLong("Seed"); 18 } else if (opt.equals("-p")) { 19 validPackages.add(nextOptionData()); 20 } else if (opt.equals("-c")) { 21 mMainCategories.add(nextOptionData()); 22 } else if (opt.equals("-v")) { 23 mVerbose += 1; 24 } else if (opt.equals("--ignore-crashes")) { 25 mIgnoreCrashes = true; 26 } else if (opt.equals("--ignore-timeouts")) { 27 mIgnoreTimeouts = true; 28 } else if (opt.equals("--ignore-security-exceptions")) { 29 mIgnoreSecurityExceptions = true; 30 } else if (opt.equals("--monitor-native-crashes")) { 31 mMonitorNativeCrashes = true; 32 } else if (opt.equals("--ignore-native-crashes")) { 33 mIgnoreNativeCrashes = true; 34 } else if (opt.equals("--kill-process-after-error")) { 35 mKillProcessAfterError = true; 36 } else if (opt.equals("--hprof")) { 37 mGenerateHprof = true; 38 } else if (opt.equals("--match-description")) { 39 mMatchDescription = nextOptionData(); 40 } else if (opt.equals("--pct-touch")) { 41 int i = MonkeySourceRandom.FACTOR_TOUCH; 42 mFactors[i] = -nextOptionLong("touch events percentage"); 43 } else if (opt.equals("--pct-motion")) { 44 int i = MonkeySourceRandom.FACTOR_MOTION; 45 mFactors[i] = -nextOptionLong("motion events percentage"); 46 } else if (opt.equals("--pct-trackball")) { 47 int i = MonkeySourceRandom.FACTOR_TRACKBALL; 48 mFactors[i] = -nextOptionLong("trackball events percentage"); 49 } else if (opt.equals("--pct-rotation")) { 50 int i = MonkeySourceRandom.FACTOR_ROTATION; 51 mFactors[i] = -nextOptionLong("screen rotation events percentage"); 52 } else if (opt.equals("--pct-syskeys")) { 53 int i = MonkeySourceRandom.FACTOR_SYSOPS; 54 mFactors[i] = -nextOptionLong("system (key) operations percentage"); 55 } else if (opt.equals("--pct-nav")) { 56 int i = MonkeySourceRandom.FACTOR_NAV; 57 mFactors[i] = -nextOptionLong("nav events percentage"); 58 } else if (opt.equals("--pct-majornav")) { 59 int i = MonkeySourceRandom.FACTOR_MAJORNAV; 60 mFactors[i] = -nextOptionLong("major nav events percentage"); 61 } else if (opt.equals("--pct-appswitch")) { 62 int i = MonkeySourceRandom.FACTOR_APPSWITCH; 63 mFactors[i] = -nextOptionLong("app switch events percentage"); 64 } else if (opt.equals("--pct-flip")) { 65 int i = MonkeySourceRandom.FACTOR_FLIP; 66 mFactors[i] = -nextOptionLong("keyboard flip percentage"); 67 } else if (opt.equals("--pct-anyevent")) { 68 int i = MonkeySourceRandom.FACTOR_ANYTHING; 69 mFactors[i] = -nextOptionLong("any events percentage"); 70 } else if (opt.equals("--pct-pinchzoom")) { 71 int i = MonkeySourceRandom.FACTOR_PINCHZOOM; 72 mFactors[i] = -nextOptionLong("pinch zoom events percentage"); 73 } else if (opt.equals("--pct-permission")) { 74 int i = MonkeySourceRandom.FACTOR_PERMISSION; 75 mFactors[i] = -nextOptionLong("runtime permission toggle events percentage"); 76 } else if (opt.equals("--pkg-blacklist-file")) { 77 mPkgBlacklistFile = nextOptionData(); 78 } else if (opt.equals("--pkg-whitelist-file")) { 79 mPkgWhitelistFile = nextOptionData(); 80 } else if (opt.equals("--throttle")) { 81 mThrottle = nextOptionLong("delay (in milliseconds) to wait between events"); 82 } else if (opt.equals("--randomize-throttle")) { 83 mRandomizeThrottle = true; 84 } else if (opt.equals("--wait-dbg")) { 85 // do nothing - it's caught at the very start of run() 86 } else if (opt.equals("--dbg-no-events")) { 87 mSendNoEvents = true; 88 } else if (opt.equals("--port")) { 89 mServerPort = (int) nextOptionLong("Server port to listen on for commands"); 90 } else if (opt.equals("--setup")) { 91 mSetupFileName = nextOptionData(); 92 } else if (opt.equals("-f")) { 93 mScriptFileNames.add(nextOptionData()); 94 } else if (opt.equals("--profile-wait")) { 95 mProfileWaitTime = nextOptionLong("Profile delay" + 96 " (in milliseconds) to wait between user action"); 97 } else if (opt.equals("--device-sleep-time")) { 98 mDeviceSleepTime = nextOptionLong("Device sleep time" + 99 "(in milliseconds)"); 100 } else if (opt.equals("--randomize-script")) { 101 mRandomizeScript = true; 102 } else if (opt.equals("--script-log")) { 103 mScriptLog = true; 104 } else if (opt.equals("--bugreport")) { 105 mRequestBugreport = true; 106 } else if (opt.equals("--periodic-bugreport")){ 107 mGetPeriodicBugreport = true; 108 mBugreportFrequency = nextOptionLong("Number of iterations"); 109 } else if (opt.equals("--permission-target-system")){ 110 mPermissionTargetSystem = true; 111 } else if (opt.equals("-h")) { 112 showUsage(); 113 return false; 114 } else { 115 Logger.err.println("** Error: Unknown option: " + opt); 116 showUsage(); 117 return false; 118 } 119 } 120 MonkeyUtils.getPackageFilter().addValidPackages(validPackages); 121 } catch (RuntimeException ex) { 122 Logger.err.println("** Error: " + ex.toString()); 123 showUsage(); 124 return false; 125 } 126 // If a server port hasn't been specified, we need to specify 127 // a count 128 if (mServerPort == -1) { 129 String countStr = nextArg(); 130 if (countStr == null) { 131 Logger.err.println("** Error: Count not specified"); 132 showUsage(); 133 return false; 134 } 135 try { 136 mCount = Integer.parseInt(countStr); 137 } catch (NumberFormatException e) { 138 Logger.err.println("** Error: Count is not a number: \"" + countStr + "\""); 139 showUsage(); 140 return false; 141 } 142 } 143 return true; 144 }
所以,Monkey运行结果中对应的就应该是:
0:--pct-touch
touch events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件)
1:--pct-motion
motion events percentage手势事件百分比(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯
2:--pct-pinchzoom
pinch zoom events percentage二指缩放百分比,即智能机上的放大缩小手势操作
3:--pct-trackball
trackball events percentage轨迹球事件百分比(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样)
4:--pct-rotation
screen rotation events percentage屏幕旋转百分比,横屏竖屏
5:--pct-permission
runtime permission toggle events percentage:运行时权限开关事件百分比(相比2015年新增)
6:--pct-nav
nav events percentage”基本”导航事件百分比(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有
7:--pct-majornav
major nav events percentage”主要”导航事件百分比(这些导航事件通常会引发UI的事件,例如5-way pad的中间键、回退键、菜单键)
8:--pct-syskeys
system(key) operations percentage”系统”按钮事件百分比(这些按钮一般专供系统使用,如Home, Back, Start Call, End Call,音量控制)
9:--pct-appswitch
app switch events percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
10:--pct-flip
keyboard flip percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
11:--pct-anyevent
any events percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。
参考:
http://blog.csdn.net/jlminghui/article/details/42261307
http://blog.csdn.net/jlminghui/article/details/42268187
--------------------------------------------------------------------------------
关注微信公众号(测试工程师小站)即可在手机上查阅,并可接收更多测试分享,发送【测试资料】更可获取百G测试教程~