monkey和script脚本
一:monkey简介
monkey是android系统自带,monkey.jar在/system/framework/monkey.jar.通过android shell命令启动,shell路径:/system/bin
二:参数
1;基本参数
-v:日志等级
-s:种子数(调用的java的java.util.math随机函数,传入一个种子,会生成固定序列,对于monkey就是伪随机事件)
--throttle(毫秒):事件间隔时长
-p:包名
2:发送事件类型(不能超过100%)
--pct-touch:触摸事件
--pct-motion:滑动事件
--pct-trackball:轨迹球
--pct-nav:导航
--pct-syskeys:按键比例
--pct-anyevent:其他事件
3:调试选项
--hprof:会生成内存快照.hprof文件
--ignore-crashes:忽略崩溃
--ignore-timeout:忽略无响应
--ignore-security-exceptions:忽略安全(一些权限问题)
--kill-process-after-error:如果有错误会杀掉进程
--monitor-native-crashes:监控本地代码(c,c++)
二:monkey批处理脚本
链接:https://pan.baidu.com/s/1SvDvLO_QIuszjBwBO2uq5g
提取码:1234
批处理核心:如下 --pkg-whitelist-file(跟白名单地址用adb shell pm list packages放入想测试的包名) -s %RANDOM%(0和32767之间随机取一个值,在monkey源码中-s也是调的java的随机数,传入一个种子生成固定的序列,相对monkey就是伪随机事件) adb logcat -c 清除缓存,adb logcat -v time -s Androidruntime 就可以过滤一些空指针和运行时异常error.txt文件中搜索fatal或exception异常关键字
set snum=%RANDOM%
start "main" /min cmd /c "adb shell monkey --pkg-whitelist-file /storage/sdcard0/whitelist.txt --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s !snum! -v -v -v --throttle 500 1000000000 >!ph!\monkeylog.txt"
二.monkeyscript
1:脚本编写
#控制monkey的参数
count=1
#调整两次事件的发送频率(速度)
speed=1.0
#大小写敏感,单词间距只有一个空格
start data >>
#启动应用指定的活动界面LaunchActivity(包名,类名)
LaunchActivity(com.android.mms,com.android.mms.ui.ConversationList)
#等待时间(毫秒)
UserWait(4000)
#指定位置按下(0)
#DispatchPointer(5109520,5109520,0,x坐标,y坐标,0,0,0,0,0,0,0);
DispatchPointer(5109520,5109520,0,56,904,0,0,0,0,0,0,0);
#指定位置抬起(1)
DispatchPointer(5109520,5109520,1,x坐标,y坐标,0,0,0,0,0,0,0);
DispatchPointer(5109520,5109520,1,56,904,0,0,0,0,0,0,0);
#monkey只能识别英文和数字输入
Android Keycode列表事件
DispathchPress(KEYCODE_H)
DispatchPress(KEYCODE_Z)
DispatchPress(KEYCODE_9)
#触摸事件
Tap(x,y,tapDuration) tapDuration为点击的持续时间可省略
Tap(x,y)
#旋转屏幕
RotateScreen(rotationDegree,persist)
rotationDegree为旋转角度:1代表90度,
persist为旋转后是否固定:0代表旋转后恢复,非0代表固定不变
RotateScreen(1,1)
#打开或者关闭软键盘
DispatchFlip(true/false)
#输入字符串
DispatchString(123a)
#滑动
Drag(x1,y1,x2,y2,stepCount)
#模拟缩放
PinchZoom(x1start,y1start,x1end,y1end,x2start,y2start,x2End,y2End,stepCount)
#等待
UserWait(毫秒)
#唤醒
DeviceWakeUp()
#运行shell命令
RunCmd(cmd)
#模拟长按事件
PressAndHold(x,y,pressDuration)
PressAndHold(x,y,3000)
#长按2秒
LongPress()
#等待5秒
ProfileWait
2:脚本运行
脚本push存放在手机sdcard中
adb push monkeyscript.txt /sdcard/
CMD中运行命令
adb shell monkey -f 脚本 运行次数
adb shell monkey –f /sdcard/monkeyscript.txt 100
3:键值表
数字和字母
0--> KEYCODE_0
1--> KEYCODE_1
2--> KEYCODE_2
3--> KEYCODE_3
4--> KEYCODE_4
5--> KEYCODE_5
6--> KEYCODE_6
7--> KEYCODE_7
8--> KEYCODE_8
9--> KEYCODE_9
a--> KEYCODE_A
b--> KEYCODE_B
c--> KEYCODE_C
d--> KEYCODE_D
e--> KEYCODE_E
f--> KEYCODE_F
g--> KEYCODE_G
h--> KEYCODE_H
i--> KEYCODE_I
j--> KEYCODE_J
k--> KEYCODE_K
l--> KEYCODE_L
m--> KEYCODE_M
n--> KEYCODE_N
o--> KEYCODE_O
p--> KEYCODE_P
q--> KEYCODE_Q
r--> KEYCODE_R
s--> KEYCODE_S
t--> KEYCODE_T
u--> KEYCODE_U
v--> KEYCODE_V
w--> KEYCODE_W
x--> KEYCODE_X
y--> KEYCODE_Y
z--> KEYCODE_Z
系统键
Home键 KEYCODE_HOME
菜单键 KEYCODE_MENU
返回键 KEYCODE_BACK
电源键 KEYCODE_POWER
音量上键KEYCODE_VOLUME_UP
音量下键KEYCODE_VOLUME_DOWN
符号键
KEYCODE_PLUS 按键'+'
KEYCODE_MINUS 按键'-'
KEYCODE_STAR 按键'*'
KEYCODE_SLASH 按键'/'
KEYCODE_EQUALS 按键'='
KEYCODE_AT 按键'@'
KEYCODE_POUND 按键'#'
KEYCODE_APOSTROPHE 按键''' (单引号)
KEYCODE_BACKSLASH 按键'\'
KEYCODE_COMMA 按键','
KEYCODE_PERIOD 按键'.'
KEYCODE_LEFT_BRACKET 按键'['
KEYCODE_RIGHT_BRACKET 按键']'
KEYCODE_SEMICOLON 按键';'
KEYCODE_GRAVE 按键'`'
KEYCODE_SPACE 空格键
4:例子:如下
#下面这个为类
type = user
#下面这个count选项,monkey并没有用到,可以忽略它
count = 1
#speed 选项是用来调整两次按键的发送濒率的
speed = 1.0
start data >>
LaunchActivity(com.zhengping.contact,com.zhengping.contact.Main)
UserWait(4000)
#点击菜单按钮
DispatchPointer(5109520,5109520,0,579,1000,0,0,0,0,0,0,0);
DispatchPointer(5109521,5109521,1,579,1000,0,0,0,0,0,0,0);
UserWait(2000)
#点击增加
DispatchPointer(5109520,5109520,0,56,904,0,0,0,0,0,0,0);
DispatchPointer(5109521,5109521,1,56,904,0,0,0,0,0,0,0);
UserWait(2000)
DispatchPointer(5109520,5109520,0,213,123,0,0,0,0,0,0,0);
DispatchPointer(5109521,5109521,1, 213,123,0,0,0,0,0,0,0);
#输入用户名
DispatchPress (KEYCODE_Z)
UserWait(500)
DispatchPress (KEYCODE_O)
UserWait(500)
DispatchPress (KEYCODE_A)
UserWait(500)
DispatchPointer(5109520,5109520,0,99,283,0,0,0,0,0,0,0);
DispatchPointer(5109521,5109521,1,99,283,0,0,0,0,0,0,0);
#输入电话号码
DispatchPress (KEYCODE_9)
UserWait(500)
DispatchPress (KEYCODE_9)
UserWait(500)
DispatchPress (KEYCODE_9)
UserWait(500)
DispatchPointer(5109520,5109520,0,75,1004,0,0,0,0,0,0,0);
DispatchPointer(5109521,5109521,1,75,1004,0,0,0,0,0,0,0);
UserWait(2000)
#确定按钮
DispatchPointer(5109520,5109520,0,118,932,0,0,0,0,0,0,0);
DispatchPointer(5109521,5109521,1,118,932,0,0,0,0,0,0,0);
UserWait(500)