Monkey使用

二次信任 提交于 2020-02-14 19:09:18

monkey概述

monkey是android系统自带的,启动脚本位于系统system/bin,它向系统发送伪随机事件,模拟用户按键输入、触摸、手势等,测试设备多长时间出现异常,从而观察系统的稳定性和容错性。伪随机事件是根据monkey命令行的参数决定的。

monkey参数

之前的源码部分二也有提到monkey参数,在这里从使用层面上罗列一下:
monkey启动命令:adb shell monkey [options] <count>

  • options:配置参数,可选
  • count:执行次数,必选
  • monkey是由adb启动的,所以只要有adb环境就可以用monkey,adb环境搭建
  • monkey停止:杀掉monkey进程adb shell kill monkey-pid

options 分类

  • 基本配置类参数

  • 事件类型频率参数

  • 约束限制类参数

  • 调试类参数

  • 官方隐藏参数

1、基本配置类参数

  • –help:帮助参数,罗列参数命令
  • -v:日至参数,每增加一个-v参数,日志级别增加一个等级,从而提供更加详细的日志信息;日志共3各级别

2、事件类型频率参数

  • -s< seed>:随机事件种子值;复现问题时,若使用相同的种子值再次运行monkey,将生成与上一次一样的事件序列
  • –throttle:事件间隔时间(毫秒),为了更好地模拟用户操作&避免过度平凡的操作导致系统崩溃,这个参数建议指定
  • –pct-touch:触摸事件的百分比(down+up,类似点击)
  • –pct-motion:动作事件的百分比(down+多次move+up,滑动操作)
  • –pct-pinchzoom:两指缩放事件的百分比
  • –pct-trackball:轨迹事件的百分比(move)
  • –pct-rotation:旋转事件的百分比(横竖屏)
  • –pct-nav:基本导航事件的百分比(基本导航事件为方向输入设备的up,down,left,right,现在手机上很少有上下左右键所以这个参数不太会用到)
  • –pct-majornav:主要导航事件的百分比(图形界面中的操作,如返回按钮、菜单按钮)
  • –pct-syskeys:系统按钮事件的百分比(系统按键为HOME、BACK、音量加减)
  • –pct-appswitch:启动事件的百分比
  • –pct-flip:键盘事件的百分比
  • –pct-anyevent:其他类型事件的百分比

3、约束类参数

  • -p:指定包名,将事件运行范围限制在一个或多个包中(多个包需要多个-p参数),当限定包时,一旦检测到系统试图启动其他包将阻止。
  • -c:指定类别名,将事件运行范围限制在一个或多个类中(多个类需要多个-c参数)。

4、调试类参数

  • –dbg-no-events:设置此项后,进入一个测试activity,就不会再进一步会生成事件,童话村那个用于监事应用程序所调用的包之间的转换
  • –hprof:用于监控内存泄漏问题,设置后将monkey事件执行之前和之后生成的内存快照文件存放在data/misc目录下,通过对比执行前后的内存快照文件,需注意内存快照文件比较大
  • –ignore-crashes:设置后,当应用程序崩溃时,monkey会继续执行知道count执行完成;否则一旦发生crash将会立即停止
  • –ignore-timeouts:设置后,当应用程序发生任何程序无响应、超时错误时,monkey会继续执行直到count 执行完成;否则monkey将停止运行
  • –ignore-security-exceptions:设置后,当应用程序发生许可错误时,monkey会继续执行直到count 执行完成;否则monkey将停止运行
  • –kill-process-after-error:设置后,当monkey由于一个错误停止时,会通知系统停止发生错误的进程,否则发生错误的进程还会处于运行状态
  • –monitor-native-crashes:监听并报告系统中本地代码的崩溃事件
  • –wait-dbg:停止执行中的monkey,知道有调试器与之相连接

5、官方隐藏类参数

  • –pkg-blacklist-file:黑名单文件,限制monkey不测试该黑名单中的包,一行一个包名
  • –pkg-whitelist-file:白名单文件,限制monkey只测试该白名单中的包,如果测试包与其他包有关联,需要在白名单中一并写出,一行一个包名
  • -f:脚本文件,指定monkey执行monkey自定义的脚本文件,后面跟脚本名称
    这3个参数在Android官网上没有,但是在实际使用过程中很有用

自定义脚本

通常monkey测试执行的是随机事件流,也可以通过自定义脚本测试某个特定的事件。

1、脚本规范

脚本文件格式最好用成xx.mks

# Start of Script
type= raw events  
count=10    脚本执行次数,但是monkey命令包含次数,这里的count不生效
speed=1.0   脚本执行速率,但是monkey命令可以设置速率,这里的speed也不生效

#下面的就是具体命令了
start data>>
LauncherActivity(pkg_name,cl_name)
Tap(x,y,duration)
UserWait(5000)
...

2.脚本常见命令

API 命令
LaunchActivity(pkg_name,cl_name) 启动被测应用的某个activity
Tap(x,y,duration) 单击事件,duration是按下时长(ms)
DispatchPress(keyName) 按键点击,keyName是按键名称
DispatchFlip(true/false) 打开/关闭软键盘
DispatchString(input) 输入字符串,input是输入内容
LongPress() 长安两秒
PressAndHold(x,y,duration) 长按事件,duration是按下时长(ms)
Drag(xStart,yStart,xEnd,yEnd,stepCount) 从(xStart,yStart)以stepCount速度移动到(xEnd,yEnd)
PinchZoom(pt1xStart,pt1yStart,pt1xEnd,pt1yEnd,pt2xStart,pt2yStart,pt2xEnd,pt2yEnd,stepCount) 缩放
RotateScreen(rotateDegree,peresist) 屏幕旋转,rotateDegree值为0-3(顺时针旋转的4个角度),peresist为是否保留
UserWait(sleepTime) 等待时间,sleepTime单位为ms
DeviceWakeUp() 唤醒屏幕

这里可以看出来monkey脚本基本是通过坐标来定位的,所以需要获取设备坐标信息。获取坐标信息我都是在系统设置-开发者选项-打开指针位置,开启之后操作屏幕即可显示坐标。
针对DispatchPress(keyName)中的按键名称可以参考安卓keycode列表

2.脚本运行

将脚本放到设备中

adb push monkey.mks /sdcard/

运行脚本

adb shell monkey -f /sdcard/monkey.mks -v 10
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!