monkey详解-2

onkey是Android自带的一个命令行工具。
Monkey可以运行在模拟器或真实设备上,并产生一系列随机的用户事件(点击、触摸、手势以及系统级别的事件)。
Monkey一般用来进行压力测试或稳定性测试。


#adb shell
#monkey --help
 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]
        [--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]
        COUNT


常用参数解释:
-p 后面跟要覆盖测试的包名。可以有多个-p,每个-p后跟一个包名
-s 后面跟整数,相同的seed值表示产生的随机事件流
-v 可以有多个,个数越多,产生的log越详细,eg:2个时,可看到activity加载的时间
--gnore-crashes 应用crash时,不停止monkey执行
--pct* 调整各类事件所占的百分比,不常用
--throttle  后面跟毫秒数,表示每个随机事件中间的时间间隔
COUNT  必选参数,表示运行随机事件的个数


举例:monkey -p com.xx.xx -v --throttle 300  9000


ps
Monkey监控并特殊处理的3个事件:
1、如果指定测试包时,限制测试在指定的包中;
2、如果应用crash或存在未捕获的异常,monkey停止并报告错误;
3、如果应用产生ANR(application not responding)错误,monkey停止并报告错误。


产生ANR的两个条件:
1、线程响应超过5s;
2、HandleMessage回调函数超过10s




1、脚本使用方法
#adb shell
#monkey -f **.script. times
说明:
1)、脚本位置可以是绝对位置,也可以是相对位置(cd进入相应的目录)
2)、times指脚本执行的次数


2、脚本的内容示例(源码修正版)
  //header
      type= raw events
      count= 10
      speed= 1.0
  //line at the end of the header means that below it is the context of script
      start data >>
      DispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,
          0.06666667,0,0.0,0.0,65539,0)
      DispatchKey(5113146,5113146,0,20,0,0,0,0)
      DispatchFlip(true)
      ...
说明:
1)、前3行是脚本头
2)、后3行是脚本内容,每行为一个函数


3、常用函数介绍
以下列表提炼于源码MonkeySourceScript.java


DispatchKey(downTime,eventTime,action,code,repeat,metaState,device,scancode)
      @param long downTime  //键最初被按下的时间
      @param long eventTime  //事件发生的时间                   
      @param int action  //(ACTION_DOWN=0,ACTION_UP=1,ACTION_MULTIPLE=2)
      @param int code  //键值,比如KEYCODE_DPAD_DOWN(20)
      @param int repeat  //
      @param int metaState  //当前按下的meta键的标识
      @param int device  //事件发生的设备id
      @param int scancode  //
DispatchPointer(downTime, eventTime,action, x, y, pressure, size, metaState,                               xPrecision,yPrecision,device, edgeFlags)
      @param long downTime  //键最初被按下的时间
      @param long eventTime  //事件发生的时间                   
      @param int action  //(ACTION_DOWN=0,ACTION_MOVE=1,ACTION_UP=2,ACTION_CANCEL=3)
      @param float x  //x坐标
      @param float y  //y坐标
      @param float pressure  //当前事件的压力,范围0-1
      @param float size  //触摸的近似值,范围0-1
      @param int metaState  //当前按下的meta键的标识
      @param float xPrecision  //x坐标精确值
      @param float yPrecision  //y坐标精确值
      @param int device  //事件来源,范围0-x,0表示不来自物理设备
      @param int sedgeFlags  //
DispatchTrackball(downTime, eventTime,action, x, y, pressure, size, metaState,                              xPrecision,yPrecision,device, edgeFlags)
Tap(x,y,duration);
DispatchPress(String key_name) 
DispatchFlip(boolean keyboardOpen)     
UserWait(long sleeptime)   
LaunchActivity(String pkg_name, String cl_name,long alarmTime)    
UserWait(long sleeptime)    
LongPress()




查看monkey资料时,发现有人把这块给列出来了。于是赶紧复制过来,以备不时之需:)


KEYCODE_UNKNOWN=0;
KEYCODE_SOFT_LEFT=1;
KEYCODE_SOFT_RIGHT=2;
KEYCODE_HOME=3;
KEYCODE_BACK=4;
KEYCODE_CALL=5;
KEYCODE_ENDCALL=6;
KEYCODE_0=7;
KEYCODE_1=8;
KEYCODE_2=9;
KEYCODE_3=10;
KEYCODE_4=11;
KEYCODE_5=12;
KEYCODE_6=13;
KEYCODE_7=14;
KEYCODE_8=15;
KEYCODE_9=16;
KEYCODE_STAR=17;
KEYCODE_POUND=18;
KEYCODE_DPAD_UP=19;
KEYCODE_DPAD_DOWN=20;
KEYCODE_DPAD_LEFT=21;
KEYCODE_DPAD_RIGHT=22;
KEYCODE_DPAD_CENTER=23;
KEYCODE_VOLUME_UP=24;
KEYCODE_VOLUME_DOWN=25;
KEYCODE_POWER=26;
KEYCODE_CAMERA=27;
KEYCODE_CLEAR=28;
KEYCODE_A=29;
KEYCODE_B=30;
KEYCODE_C=31;
KEYCODE_D=32;
KEYCODE_E=33;
KEYCODE_F=34;
KEYCODE_G=35;
KEYCODE_H=36;
KEYCODE_I=37;
KEYCODE_J=38;
KEYCODE_K=39;
KEYCODE_L=40;
KEYCODE_M=41;
KEYCODE_N=42;
KEYCODE_O=43;
KEYCODE_P=44;
KEYCODE_Q=45;
KEYCODE_R=46;
KEYCODE_S=47;
KEYCODE_T=48;
KEYCODE_U=49;
KEYCODE_V=50;
KEYCODE_W=51;
KEYCODE_X=52;
KEYCODE_Y=53;
KEYCODE_Z=54;
KEYCODE_COMMA=55;
KEYCODE_PERIOD=56;
KEYCODE_ALT_LEFT=57;
KEYCODE_ALT_RIGHT=58;
KEYCODE_SHIFT_LEFT=59;
KEYCODE_SHIFT_RIGHT=60;
KEYCODE_TAB=61;
KEYCODE_SPACE=62;
KEYCODE_SYM=63;
KEYCODE_EXPLORER=64;
KEYCODE_ENVELOPE=65;
KEYCODE_ENTER=66;
KEYCODE_DEL=67;
KEYCODE_GRAVE=68;
KEYCODE_MINUS=69;
KEYCODE_EQUALS=70;
KEYCODE_LEFT_BRACKET=71;
KEYCODE_RIGHT_BRACKET=72;
KEYCODE_BACKSLASH=73;
KEYCODE_SEMICOLON=74;
KEYCODE_APOSTROPHE=75;
KEYCODE_SLASH=76;
KEYCODE_AT=77;
KEYCODE_NUM=78;
KEYCODE_HEADSETHOOK=79;
KEYCODE_FOCUS=80;//*Camera*focus
KEYCODE_PLUS=81;
KEYCODE_MENU=82;
KEYCODE_NOTIFICATION=83;
KEYCODE_SEARCH=84;
KEYCODE_MEDIA_PLAY_PAUSE=85;
KEYCODE_MEDIA_STOP=86;
KEYCODE_MEDIA_NEXT=87;
KEYCODE_MEDIA_PREVIOUS=88;
KEYCODE_MEDIA_REWIND=89;
KEYCODE_MEDIA_FAST_FORWARD=90;
KEYCODE_MUTE=91;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值