1. 基本语法
adb shell monkey [options] <event-count>
options可以分为以下5个类型:
-
基本配置参数
参数 说明 -help 输出monkey的使用指南 -v 表示打印信息的级别,可以在命令行中出现多次,每一个v选项都会增加monkey向命令行打印输出的详细级别。默认的0只会打印启动信息、测试完成信息和最终的结果信息。级别1会打印测试执行的一些信息,级别2会打印最详细的信息。 -
事件类型参数
参数 说明 -s <随机数> 通俗一点说monkey测试都是一些随机操作,如果一次操作中出现了bug,如果要复现bug是比较难的。在每次操作的时候加上一个seed值,现在操作只要seed值是一样的,就能帮助我们复现操作。 –throttle <毫秒数> 有时候monkey执行事件很快,肉眼根本看不清点击事件,加上这个参数可以控制每个事件之间的间隔数,使得执行动作慢下来,方便我们查看 –pct-touch <百分比> 设置触控事件生成的比例 –pct-motion <百分比> 设置滑动事件的生成比例 –pct-trackball <百分比> 设置轨迹事件的比例 –pct-nav <百分比> 设置“基本”的导航事件的生成比例。导航事件是指模拟方向性设备输入向上/下/左/右导航操作 –pct-majornav <百分比> 设置轨迹事件的比例 –pct-syskeys <百分比> 设置系统按键消息的比例,系统中保留的按键消息,如:首页(home)、后退(back)、拨号、挂断、音量控制键 –-pct-appswitch <百分比> 设置启动活动的事件比例,每隔一段随机时间,monkey就会调用startActivity()函数来尽可能地覆盖待测应用的界面 –-pct-anyevent <百分比> 设置其他事件的比例,包括普通的按键消息,设备上一些不常用的按键等 -
约束性参数
参数 说明 -p <包名> 使用这个参数可以指定一个或几个包名,monkey就只会测试这些包中的活动,同时设置多个包名时,每个包需要用“-p”参数制定 -c<意图的种类> 定意图的种类,这样monkey只会启动可以处理的这些种类的意图活动,如果没有设定这个选项,monkey只会启动列有Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_MONKEY的活动 -
调试类参数
参数 说明 –dbg-no-events 指定了这个选项,monkey知会启动待测程序,不会发送消息 –hprof 如果指定了这个选项,monkey会在发送事件的前后生成性能报告 -ignore-crashes 一般情况下,monkey会在待测应用奔溃或者发生未处理异常后停止运行,如果指定了这个选项,会继续向系统发送消息,直到指定个数的消息发送完毕 –ignore-timeouts 通常情况下,当应用程出现 应用程序没有响应 对话框monkey会停止,如果指定这个选项,monkey将继续向系统发送事件,直到完成 –ignore-security-exceptions 通常情况下,当应用程序发生权限错误(如启动一个需要某些许可的Activity)如果指定这个选项,monkey将继续向系统发送事件,直到完成 –kill-process-after-error 这个选项可以通知系统当应用发生错误时杀掉进程 –monitor-native-crashes 监控和报告Android系统中本机代码的崩溃事件,如果-kill-process-after-error设置,系统将停止 –wait-dbg 启动monkey后,先中断其运行,等待调试器附加上来 -
隐藏的参数类型
参数 说明 -pck-blacklist-file <黑名单文件> 设置该选项后,monkey将不测试该名单中的包,文档中每包名写一行 -pck-whitelist-file <白名单文件> 设置该选项后,monkey只测试该名单中的包,文档中每包名写一行 -f <脚本文件> 设置monkey执行自定义脚本文件
比如:
# 启动指定app,向其发送100个伪随机事件
adb shell monkey -p [packagename] -v 100
2. 保存日志
# 保存运行日志到D盘下的 log.log文件中
adb shell monkey -p [packagename] -v -v -v 1000 >D:\log.log
3. 黑白名单的使用
pck-blacklist-file <黑名单文件>
,pck-whitelist-file <白名单文件>
,两者同一时间只能使用一个,不能同时使用
-
第一步建立黑白名单文件,黑白名单文件为文本格式,里面存储的是要列入黑白名单的包名,用回车换行区
分,一行一个包名,比如创建黑名单black.txtcom.test.app com.zui.player
-
第二步将刚建好的文件push到手机上,如:
adb push D:\black.txt /sdcard/monkeytest
执行命令
adb shell monkey --pkg-blacklist-file /sdcard/monkeytest/black.txt --throttle 500 -v -v -v 1000
4. 停止monkey
Monkey一旦运行起来,就无法停止,直到事件完成或者异常终止执行(不能选择上述命令中忽略崩溃命令),但是我们可以通过杀进程的方式终结monkey
# 获取monkey 的 PID,应该是 com.android.commands.monkey
adb shell ps | grep monkey
# 杀进程
adb shell kill [pid]
5. monkey脚本
有时候我们不想让它随机执行,通过脚本可以让测试按照我们自定义的流程来执行。使用-f
参数就可以执行Monkey的脚本了 adb shell monkey -f <script> 1
。
官网没有介绍Monkey脚本的使用的文章,可以参照sdk源码中的写法。在 MonkeySourceScriptjava 这个类中可以参考。
API | 说明 |
---|---|
LaunchActivity(Pkg_name,cl_name) | 启动应用的Activity |
Tap(x,y,tapDuration) | 模拟一次手指单击事件 |
DispatchPress(KeyCodeName) | 按键 |
RotateScreen(ratationDegree,peresist) | 旋转屏幕 ratationDegree:四个参数0123分别代表0,90,180,270 peresist:两个参数^0,0旋转后固定和旋转后不固定 |
DispatchFlip(true/false) | 打开或关闭软键盘 |
LongPress() | 长按两秒 |
PressAndHold(x,t,pressDuration) | 模拟长按事件 |
DispatchString(input) | 输入字符串 |
Drag(sStart,yStart,xEnd,yEnd.stepCount) | 用于模拟一个拖拽操作 |
PinchZoom(pt1xStart,pt1yStart,pt1xEnd,pt1yEnd,pt2xStart,pt2yStart,pt2xEnd,pt2yEnd,stepCount) | 模拟缩放手势 |
UserWait(sleepTime) | 让脚本中断一段时间 |
DeviceWakeUp() | 唤醒屏幕 |
PowerLog(power_log_type,test_case__status) | 模拟电池电量信息 |
WriteLog() | 将电池信息写入SD卡 |
RunCmd() | 运行shell命令 |
DispatchPointer(downtime,eventTime,action,x,yxpressure,size,metastate,xPrecision,yPrecision,device,edgeFilags) | 向指定位置发送单个手势 action:0是按下,1是弹起 |
DispatchKey(downTime,eventTime,action,code,repeat,metaStatue,device,scancode) | 发送按键消息 |
Launchlnstrumentation(test_name,runner__name) | 运行一个instrumentation测试用例 |
DispatchTrackball | 模拟发送轨迹球事件 |
ProfileWait | 等待5秒 |
StartCaptureFramerate() | 获取帧率 |
EndCaptureAppFramerate(input) | 结束获取帧率 |
startCaptureAppFramerate(app) | 获取指定应用帧率 |
EndCaptureAppFramerate(app,input) | 结束获取帧率 |