这段时间工作上出现变动,接触到Monkey测试,在这做个总结。
Monkey是一个在安卓上测试的工具包,功能实现不复杂,花了几个小时撸了一遍源码,将源码解读和搜集到的信息汇总一下。
adb shell,或者直接进入 shell 并输入 Monkey 命令。所以需要先安装SDK以支持adb命令$ adb shell monkey [options] <event-count>
如果未指定任何选项,Monkey 将以静默(非详细)模式启动,并将事件发送到目标上安装的任何(及所有)软件包。
下面是一个更典型的命令行,它会启动您的应用并向其发送 500 个伪随机事件:
$ adb shell monkey -p your.package.name -v 500

# Script to start "monkey" on the device, which has a very rudimentary# shell.#base=/systemexport CLASSPATH=$base/framework/monkey.jartrap "" HUPfor a in "$@"; do echo " bash arg:" $adoneexec app_process $base/bin com.android.commands.monkey.Monkey "$@"
类型 | MonkeyEvent实现 | 备注 |
key事件 | MonkeyKeyEvent | |
touch事件 | MonkeyTouchEvent | 继承自MonkeyMotionEvent,还支持多次touch事件(根据参数个数判断) |
trackball事件 | MonkeyTrackballEvent | 继承自MonkeyMotionEvent |
wait事件 | MonkeyWaitEvent | sleep,模拟操作间有间隔 |
profileWait事件 | MonkeyWaitEvent | |
rotation事件 | MonkeyRotationEvent | |
tap事件 | MonkeyTouchEvent | 生成ACTION_DOWN和ACTION_UP 2个事件 |
pressAndHold事件 | MonkeyTouchEvent | 生成ACTION_DOWN和ACTION_UP 2个事件, 两个事件之间存在 pressDuration 的wait时间 |
drag事件 | MonkeyTouchEvent | 生成ACTION_DOWN和ACTION_UP 2个事件, 两个事件之间多次ACTION_MOVE事件 |
pinchAndZoom事件 | MonkeyTouchEvent | 生成ACTION_DOWN和ACTION_UP 2个事件, 两个事件之间多次ACTION_MOVE、 ACTION_POINTER_DOWN、 ACTION_POINTER_INDEX_SHIFT事件 |
flip事件 | MonkeyFlipEvent | 键盘事件 |
launch事件 | MonkeyActivityEvent | |
wakeUp事件 | MonkeyActivityEvent、 MonkeyKeyEvent | 涉及锁屏、解锁等事件 |
launchInstrumentation事件 | MonkeyInstrumentationEvent | |
keypress事件 | MonkeyKeyEvent | 生成ACTION_DOWN和ACTION_UP 2个事件,并携带参数keyCode, 两个事件之间无时间间隔 |
longpress事件 | MonkeyKeyEvent | 生成ACTION_DOWN和ACTION_UP 2个事件,并携带参数KEYCODE_DPAD_CENTER, 两个事件之间存在 2ms 的wait时间 |
powerLog事件 | MonkeyPowerEvent | The power log event is mainly for the automated power framework |
writeLog事件 | MonkeyPowerEvent | 无参 |
runCmd事件 | MonkeyCommandEvent | 运行shell命令 |
dispatchString事件 | MonkeyCommandEvent | 通过shell命令传入参数 |
StartCaptureFramerate事件 | MonkeyGetFrameRateEvent | 参数:start |
EndCaptureFramerate事件 | MonkeyGetFrameRateEvent | 参数:end+输入参数 |
StartCaptureAppFramerate事件 | MonkeyGetAppFrameRateEvent | 参数:start+app |
EndCaptureAppFramerate事件 | MonkeyGetAppFrameRateEvent | 参数:end+app+label |
原生的Monkey虽然功能已经很强大,但依然存在一些不足,比如:
改进的思考点:
技术牛逼,技术就是让人无脑操作。 --- me