一、什么是Monkey
monkey是Android SDK提供的一个命令行工具,可简单方便的发送伪随机的用户事件流,对Android APP进行稳定性测试(压力测试),用于测试APP是否存在anr(无响应)和crash(崩溃)情况
二、环境搭建
配置Android SDK环境和环境变量
二、Monkey使用
1、进入adb shell环境
在windows环境中,WIN+R输入cmd进入DOS界面,输入adb shell
进入adb shell环境
2、在shell环境下输入monkey相应命令
如:
3、查看应用包名
1、若有root权限,进入/data/data/下使用ls(ls-a)查看包名
2、若无root权限,使用pm list package查看包名
(控制monkey执行时长,可以通过设置执行时长/事件发送延时,计算出需要执行的次数,如:需要执行5小时,每1000毫秒发送一个事件,则计算如下:(56060*100)/1000=18000次。
monkey -p *** --ignore-crashes --ignore-timeoutss --throttle 1000 18000
二、Monkey命令参数详解
monkey命令参数为:
基础参数:-v 、-s、-p、–throttle等
调试参数:–ignore-crashes等
事件类型:–pct-touch等
(一)基础参数
1、最简单的monkey命令(monkey 1000:表示在设备上,针对整个系统发送1000个伪随机事件)
2、-v参数
用于指定反馈信息级别(信息级别就是日志的详细程度)总共分为3级,默认为-v(对应:level0)
-v:只提供启动提示、测试完成提示和最终结果等少量信息。
-v -v:较为详细的日志,包括每个发送到activity的时间信息。
-v -v -v:最详细的日志,包括测试中选中/未选中的activity信息。
注意:在monkey测试完成时,最后一定会有一个:monkey finished标识。
3、-p参数
当我们需要针对具体的app进行测试时,就需要我们提供具体的app包名给monkey,此时就需要用到参数-p。在-p后跟随app包名。
在测试时,可以不指定包名,此时monkey会在测试设备上随机启动app进行操作;如果只需要测试一个app,使用一个-p即可;如果有多个app同时测试,可以直接使用-p 包名1 -p 包名2指定具体要测试的app。
4、-s参数
种子值(seed),因为monkey是发送的是伪随机的事件流,但是如果两次seed值相同,那两次monkey测试所产生的事件序列也相同。(所以一般在测试时要记录seed值,以防出现无响应和crash,不容易验证。)
注意:-s需要跟在包名后,次数前
5、–throttle参数
设置执行操作的延迟时间(毫秒)–是指两个事件之间的间隔,如果没有指定此参数,会尽可能快的生成和发送事件。
(二)调试参数
1、—ignore-timeouts
如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。
2、–monitor-native-crashes
用于指定是否监视并报告应用程序发生崩溃的本地代码
3、–hprof
该选项设置后,将会在monkey事件序列前后立刻生成report,大小为大于5MB,存储在/data/misc
(三)事件类型
如果不设置会是–pct-anyevent为100%,即纯随机事件
0:触摸事件占比,参数–pct-touch
(调整touch触屏事件的百分比,触碰事件就是指在屏幕上的一个单独位置的一次点击/抬起的事件)
1:滑屏事件占比,参数–pct-motion(手势事件)
(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯)
2:缩放事件占比,参数–pct-pinchzoom
3:轨迹球事件占比,参数–pct-trackball
4:屏幕旋转事件占比,参数–pct-rotation
6:基本导航事件占比,参数–pct-nav
7:主要导航事件占比,参数–pct-majornav
8:系统事件占比,参数–pct-syskeys
9:Activity启动事件占比,参数–pct-appswitch
10:键盘翻转事件占比,参数–pct-flip
11:其他事件百分比,参数–pct-anyevent
monkey基本使用到这里就结束了,欢迎一起学习交流
#### 测试结果分析:
正常情况: 如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间;
异常情况:
Monkey 测试出现错误后,一般的分析步骤
看Monkey的日志 (注意第一个swith以及异常信息等)
- 程序无响应的问题: 在日志中搜索 “ANR”
- 崩溃问题:在日志中搜索 “Exception” (如果出现空指针,NullPointerException) 肯定是有bug
monkey测试结果中的crash需要引起重视,理论上Monkey测试所出现的NullPointException, 都是可以在用户使用时出现的。monkey测试出现的所有crash在版本发布前都是需要修复的