Monkey日志信息的11种Event percentages
我们查看官方文档,表里只给出了8种事件(可以看我上篇的翻译文档)。但我们运行Monkey后,却发现有11种事件!最坑爹的是,在每种事件的百分比后面,他还不给注明是什么事件!
原来不同的Android SDK中的Event percentages种类数和顺序是不一样的!

我们可以查看android-4.2.2_r1.2中的MonkeySourceRandom.java中定义的这些值:
- public static final int FACTOR_TOUCH = 0;
- public static final int FACTOR_MOTION = 1;
- public static final int FACTOR_PINCHZOOM = 2;
- public static final int FACTOR_TRACKBALL = 3;
- public static final int FACTOR_ROTATION = 4;
- public static final int FACTOR_NAV = 5;
- public static final int FACTOR_MAJORNAV = 6;
- public static final int FACTOR_SYSOPS = 7;
- public static final int FACTOR_APPSWITCH = 8;
- public static final int FACTOR_FLIP = 9;
- public static final int FACTOR_ANYTHING = 10;
- public static final int FACTORZ_COUNT = 11; // should be last+1
- private static final int GESTURE_TAP = 0;
- private static final int GESTURE_DRAG = 1;
- private static final int GESTURE_PINCH_OR_ZOOM = 2;
然后再来看Monkey.java源码中的processOptions()方法
- private boolean processOptions() {
- // quick (throwaway) check for unadorned command
- if (mArgs.length < 1) {
- showUsage();
- return false;
- }
- try {
- String opt;
- while ((opt = nextOption()) != null) {
- if (opt.equals("-s")) {
- mSeed = nextOptionLong("Seed");
- } else if (opt.equals("-p")) {
- mValidPackages.add(nextOptionData());
- } else if (opt.equals("-c")) {
- mMainCategories.add(nextOptionData());
- } else if (opt.equals("-v")) {
- mVerbose += 1;
- } else if (opt.equals("--ignore-crashes")) {
- mIgnoreCrashes = true;
- } else if (opt.equals("--ignore-timeouts")) {
- mIgnoreTimeouts = true;
- } else if (opt.equals("--ignore-security-exceptions")) {
- mIgnoreSecurityExceptions = true;
- } else if (opt.equals("--monitor-native-crashes")) {
- mMonitorNativeCrashes = true;
- } else if (opt.equals("--ignore-native-crashes")) {
- mIgnoreNativeCrashes = true;
- } else if (opt.equals("--kill-process-after-error")) {
- mKillProcessAfterError = true;
- } else if (opt.equals("--hprof")) {
- mGenerateHprof = true;
- } else if (opt.equals("--pct-touch")) {
- int i = MonkeySourceRandom.FACTOR_TOUCH;
- mFactors[i] = -nextOptionLong("touch events percentage");
- } else if (opt.equals("--pct-motion")) {
- int i = MonkeySourceRandom.FACTOR_MOTION;
- mFactors[i] = -nextOptionLong("motion events percentage");
- } else if (opt.equals("--pct-trackball")) {
- int i = MonkeySourceRandom.FACTOR_TRACKBALL;
- mFactors[i] = -nextOptionLong("trackball events percentage");
- } else if (opt.equals("--pct-rotation")) {
- int i = MonkeySourceRandom.FACTOR_ROTATION;
- mFactors[i] = -nextOptionLong("screen rotation events percentage");
- } else if (opt.equals("--pct-syskeys")) {
- int i = MonkeySourceRandom.FACTOR_SYSOPS;
- mFactors[i] = -nextOptionLong("system (key) operations percentage");
- } else if (opt.equals("--pct-nav")) {
- int i = MonkeySourceRandom.FACTOR_NAV;
- mFactors[i] = -nextOptionLong("nav events percentage");
- } else if (opt.equals("--pct-majornav")) {
- int i = MonkeySourceRandom.FACTOR_MAJORNAV;
- mFactors[i] = -nextOptionLong("major nav events percentage");
- } else if (opt.equals("--pct-appswitch")) {
- int i = MonkeySourceRandom.FACTOR_APPSWITCH;
- mFactors[i] = -nextOptionLong("app switch events percentage");
- } else if (opt.equals("--pct-flip")) {
- int i = MonkeySourceRandom.FACTOR_FLIP;
- mFactors[i] = -nextOptionLong("keyboard flip percentage");
- } else if (opt.equals("--pct-anyevent")) {
- int i = MonkeySourceRandom.FACTOR_ANYTHING;
- mFactors[i] = -nextOptionLong("any events percentage");
- } else if (opt.equals("--pct-pinchzoom")) {
- int i = MonkeySourceRandom.FACTOR_PINCHZOOM;
- mFactors[i] = -nextOptionLong("pinch zoom events percentage");
- } else if (opt.equals("--pkg-blacklist-file")) {
- mPkgBlacklistFile = nextOptionData();
- } else if (opt.equals("--pkg-whitelist-file")) {
- mPkgWhitelistFile = nextOptionData();
- } else if (opt.equals("--throttle")) {
- mThrottle = nextOptionLong("delay (in milliseconds) to wait between events");
- } else if (opt.equals("--randomize-throttle")) {
- mRandomizeThrottle = true;
- } else if (opt.equals("--wait-dbg")) {
- // do nothing - it's caught at the very start of run()
- } else if (opt.equals("--dbg-no-events")) {
- mSendNoEvents = true;
- } else if (opt.equals("--port")) {
- mServerPort = (int) nextOptionLong("Server port to listen on for commands");
- } else if (opt.equals("--setup")) {
- mSetupFileName = nextOptionData();
- } else if (opt.equals("-f")) {
- mScriptFileNames.add(nextOptionData());
- } else if (opt.equals("--profile-wait")) {
- mProfileWaitTime = nextOptionLong("Profile delay" +
- " (in milliseconds) to wait between user action");
- } else if (opt.equals("--device-sleep-time")) {
- mDeviceSleepTime = nextOptionLong("Device sleep time" +
- "(in milliseconds)");
- } else if (opt.equals("--randomize-script")) {
- mRandomizeScript = true;
- } else if (opt.equals("--script-log")) {
- mScriptLog = true;
- } else if (opt.equals("--bugreport")) {
- mRequestBugreport = true;
- } else if (opt.equals("--periodic-bugreport")){
- mGetPeriodicBugreport = true;
- mBugreportFrequency = nextOptionLong("Number of iterations");
- } else if (opt.equals("-h")) {
- showUsage();
- return false;
- } else {
- System.err.println("** Error: Unknown option: " + opt);
- showUsage();
- return false;
- }
- }
- } catch (RuntimeException ex) {
- System.err.println("** Error: " + ex.toString());
- showUsage();
- return false;
- }
- // If a server port hasn't been specified, we need to specify
- // a count
- if (mServerPort == -1) {
- String countStr = nextArg();
- if (countStr == null) {
- System.err.println("** Error: Count not specified");
- showUsage();
- return false;
- }
- try {
- mCount = Integer.parseInt(countStr);
- } catch (NumberFormatException e) {
- System.err.println("** Error: Count is not a number");
- showUsage();
- return false;
- }
- }
- return true;
- }
所以,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-nav//nav
events percentage”基本”导航事件百分比(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有
6:--pct-majornav//major
nav events percentage”主要”导航事件百分比(这些导航事件通常会引发UI的事件,例如5-way pad的中间键、回退键、菜单键)
7:--pct-syskeys//system(key)
operations percentage”系统”按钮事件百分比(这些按钮一般专供系统使用,如Home, Back, Start Call, End Call,音量控制)
8:--pct-appswitch//app
switch events percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
9:--pct-flip//keyboard
flip percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
10:--pct-anyevent//anyevents
percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。
参考:
http://blog.csdn.net/jlminghui/article/details/42261307
http://blog.csdn.net/jlminghui/article/details/42268187
源码:
https://code.google.com/p/android-source-browsing/source/browse/cmds/monkey/src/com/android/commands/monkey/Monkey.java?repo=platform--development&name=android-4.2.2_r1.2
Monkey日志信息的11种Event percentages的更多相关文章
- [信息收集]11种绕过CDN查找真实IP方法【转载】
今天在看一些有关CDN的文章的时候,发现一篇写的蛮好的文章,故转载过来. 原文链接:https://www.cnblogs.com/qiudabai/p/9763739.html 0x01 验证是否存 ...
- C#添加错误日志信息
错误日志是软件用来记录运行时出错信息的文本文件.编程人员和维护人员等可以利用错误日志对系统进行调试和维护. 系统日志 系统日志包含了由Windows系统组件记录的事件.例如,在启动期间装入驱动程序或其 ...
- Monkey测试:日志信息分析
在跑monkey时,我们需要将日志输出到文件,然后对日志信息进行分析. 一.输出日志到文件 在monkey命令后加>文件地址 如:adb shell monkey 1000>E:/text ...
- Monkey框架(测试方法篇) - monkey日志分析
Monkey日志分析是Monkey测试中非常重要的一个环节,通过日志分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和解决问题.介绍日志 ...
- 安卓app测试之Monkey日志分析
转:原文:https://blog.csdn.net/a136332462/article/details/76066909 一.一般测试结果分析-搜索关键字: 1.无响应问题可以在日志中搜索 “A ...
- monkey日志管理
日志管理作用 Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和 ...
- Appium自动化测试教程-自学网-monkey日志管理
日志管理作用 Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和 ...
- 如何分析和研究Log文件 ,如何看日志信息
如何分析和研究Log文件 ,如何看日志信息 . Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没有入门吧 . 下面我们就来说说如何处 ...
- Swing应用开发实战系列之五:后台日志信息前台监控器
作为一个程序设计人员,我们深知日志的重要性,对于日志的监控,我们通常不外乎采用以下两种方式:日志文件方式和后台打印方式,常规情况下,这两种日志监控方式完全可以满足我们对日志监控的需要.但是,当我们用S ...
随机推荐
- 杭电acm刷题顺序
最近兴趣来了,闲暇之余,回顾大学期间刷过的杭电acm那些入门级别的题,以此巩固基础知识! 以下参考刷题顺序,避免入坑 原文传送门:https://blog.csdn.net/liuqiyao_01/a ...
- 实战:ADFS3.0单点登录系列-集成MVC
本文将讲解如何让MVC应用程序与ADFS集成,完成认证的过程. 目录: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0单点登录系列-ADFS3 ...
- JS encodeURIComponent函数
为了避免歧义,可以用JS 的encodeURIComponent函数 将有歧义的字符(?+=等)转换成对应的ASCII编码 for(var i=0;i<whichform.elements.l ...
- POJ-3565 Ants---KM算法+slack优化
题目链接: https://vjudge.net/problem/POJ-3565 题目大意: 在坐标系中有N只蚂蚁,N棵苹果树,给你蚂蚁和苹果树的坐标.让每只蚂蚁去一棵苹果树, 一棵苹果树对应一只蚂 ...
- Android(java)学习笔记78:Java类初始化顺序
1. Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: (1)静态变量 (2)静态初始化块 (3)变量 (4)初始化块 (5)构造器 由此得出Java继承类初始化顺序结论: (1)继 ...
- VERITAS NETBACKUP运维手册(自制)
ps:本文为目录.详情请点如下目录超链接 1 VERITAS NETBACKUP介绍 1.1 NBU基本概念 1.2 配置存储单元 1.3 配置备份策略(Policy) 1.4 配置NetBackup ...
- django+xadmin在线教育平台(一)
大家好,此教程为在慕学网的实战教程Python升级3.6 强力Django+杀手级Xadmin打造在线教育平台的学习笔记,不对望指正! 使用Django+Xadmin打造在线教育平台(Python2, ...
- oop 单例模式
- 第7章 数据库访问与ORM 慕课网微信小程序开发学习笔记
第7章 数据库访问与ORM https://coding.imooc.com/learn/list/97.html 目录: 7-1 数据库操作三种方式之原生SQL 19:09 7-2 从一个错误了解E ...
- wusir 面试题答案在老男孩的视频里
注意:你问答案在哪里?答案在视频里了,就是不给你写. 第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C+ ...