参考文章:
https://zhuanlan.zhihu.com/p/97335363
示例:
monkey -p 包名 --pct-syskeys 0 --pct-touch 20 --pct-pinchzoom 30 --pct-motion 15 --pct-appswitch 30 --throttle 500 -v -v -v --ignore-crashes --ignore-timeouts 1000000 >/sdcard/monkey.log
解释:在“包名”下进行测试,模拟的事件占比(触摸事件20% 缩放事件30% 手势事件15% Activity切换事件30%),事件操作间隔为500ms,忽略crash崩溃和ANR情况(应用崩溃或者ANR发生时测试不中断),测试的事件总次数为1000000,日志保存在/sdcard/monkey.log。
如果报错“SYS_KEYS has no physical keys but with factor”,需要配置:--pct-syskeys 0
一个完整的monkey指令可以由上述三个部分组成:基础参数、发送事件的类型比例、调试选项。
一、基础参数介绍:
-p:包名
-v:日志级别(-v 第一级别; -v -v第二级别;-v –v –v 第三级别)
第一级别:level0,缺省值,仅提供启动提示、测试完成和最终结果等少量信息;
第二级别:level1,提供提供较为详细的日志,包括每个发送到Activity的信息;
第三级别:level2,提供更详细的日志,包括了测试中选中/未选中的Activity信息.
-throttle :单位毫秒,代表用户操作的时间间隔(时延)
-s:随机数种子,s相同两次测试生成的测试时序也相同,多用于问题复现
二、发送事件的类型比例
注意:事件类型配置的数值和不要超过100。
一共11种类型,使用方式:--pct-类型名 比例数值 (若不写比例数值,则整体随机进行)
1、touch:触摸,在屏幕某处按下再抬起
2、motion:手势,在屏幕某处的按下、随机移动、抬起的操作(划动)
3、pinchzoom:二指缩放,在屏幕上某处放大缩小事件,如地图的测试,这类事件较多
4、trackball:轨迹,模拟的轨迹球的操作,早期手机较多,现在的手机几乎都没有轨迹球,但轨迹球事件中包含曲线滑动操作,如果被测程序需要曲线滑动时可以选用此参数
5、rotation:旋转,屏幕旋转事件是一个隐藏事件,它是模拟屏幕的横屏和竖屏转换
6、nav:基本导航,点击方向输入设备的上、下、左、右按键的操作,现在手机多数没有上下左右的操作,这类事件很少
7、majornav:主要导航事件,击“主要导航”按键的操作,这些按键通常会导致UI界面中的动作,如键盘回退,菜单,中间键等
8、syskeys:系统按键,点击系统保留使用的按键的操作,如点击Home键、返回键、音量调节键等
9、appswitch:启动activity,在手机上启动一个Activity的操作,即打开某个应用的某个activity界面
10、flip:键盘,一些与键盘相关的操作,如点击输入框、键盘弹起、键盘收回等
11、anyevent:除以上事件以外的其它事件,比如按键、其他不常用的设备上的按钮等
三、调试选项
为了保证测试能长期进行(monkey只可配置测试次数,时长可以多试几次大概评估出来),需要增加调试参数,避免测试中断,可多个参数一起使用。
- --ignore-crashes 指即使应用程序崩溃,Monkey依然会发送事件,直到事件计数达到指定的次数为止
- --ignore-security-exceptions 指APP发生许可证书错误时,Monkey依然继续发送事件,直到事件数目达到目标值为止
- --ignore-timeouts 指app发生ANR错误,Monkey依然会发送事件,直到事件计数完成
- --kill-process-after-error 指APP发生错误时,应用程序停止运行并保持在当前状态,不会杀死应用程序的进程
------------------------------------------------------------------
最后,把monkey指令放在xshell中运行就可以了。最近使用monkey进行了应用内存占用情况的测试,确认有内存泄露的趋势。monkey日志分析未实操,可根据参考文章进行学习。