



这就是monkey测试!
2021-01-22 14:33在软件测试过程中,我们最能想到的就是按照功能常规流程操作步骤执行,但有很多问题是藏匿在长时间非常规测试操作中。介绍下这种类型测试的monkey测试。
1.什么是monkey测试?
Monkey直译为‘猴子’,猴子和测试人员本质区别就是猴子不知道业务逻辑,猴子可以理解为完全不懂业务知识也没有测试相关经验的的人员,在对于同样一个项目而言,monkey测试就是对项目各种无目的事件操作。
2.Monkey测试原理
monkey向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试
3.Monkey运行原理
monkey测试需要借助monkey工具,monkey工具是Android自带的一个工具,使用java语言编写的,jar包路径:/system/framework/monkey.jar

如果要启动monkey.jar则需要运行android中的名为“monkey”的Shell脚本,shell脚本存放路径:/system/bin/monkey

Monkey的shell脚本需要通过adb命令来执行,即通过cmd窗口中,adb shell monkey +命令参数 来进行monkey测试
4.monkey测试参数说明

a.基础参数
1.-p:指定要测试的包名
说明:如何查看应用的包名?
手机上打开目标应用:
DOS框中输入:adb shell dumpsys window|findstr mCurrentFocus

2.-v :指定输出日志的级别,monkey输出日志有3个级别,通过-v参数来指定:
-v一级别 仅提供启动提示、测试完成和最终结果等少量信息
例:adb shell monkey -p com.tal.kaoyan -v 100
–v –v二级别提供较为详细的日志,包括每个发送到Activity的事件信息
例:adb shell monkey -p com.tal.kaoyan -v -v 100
–v –v –v三级别提供最详细的日志
例:adb shell monkey -p com.tal.kaoyan -v -v -v 100
3.-s:用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的
注:seed值为monkey日志中的信息

4.--throttle <毫秒>事件之间插入固定延迟
b.事件类型参数
Monkey的事件类型总共有11种:
0:点击事件,即参数--pct-touch
1:滑动事件,即参数--pct-motion
2:缩放事件,即参数--pct-pinchzoom
3:轨迹球事件,即参数--pct-trackball
4:屏幕旋转事件,即参数--pct-rotation
5:基本导航事件,即参数--pct-nav
6:主要导航事件,即参数--pct-majornav
7:系统按键事件,即参数--pct-syskeys
8:Activity启动事件,即参数--pct-appswitch
9:键盘唤出隐藏事件,即参数--pct-flip
10:其他事件,即参数--pct-anyevent
下图是执行monkey测试日志中显示发送每类事件的默认比例,可设定某个事件类型的占比

c.调试参数
Monkey测试过程中需要长时间的对应用发送事件测试,很可能测试时间不久就因为碰到问题而崩溃,此时测试停止,而达不到我们长期测试的目的,我们需要通过调试参数来让测试继续执行就通过调试参数告诉monkey在遇到问题的时候该怎么处理
(1)--ignore-crashes:用于指定当应用程序崩溃时Monkey依然运行
(2)--ignore-timeouts:应用程序发生任何超时错误(如“Application Not responding”对话框)Monkey依然运行
(3)--ignore-security-exceptions 指定应用程序发生许可错误时(如证书许可,网络许可等),monkey依然运行
5.Monkey测试命令
adb shell monkey –p com.tal.kaoyan --throttle 100 -s 1606780631055 --pct-touch 70 --ignore-crashes --ignore-timeouts --ignore-security-exception -v –v –v 864000(发送事件的次数) > d:emp\monkey.log
注:
(1)monkey的参数没有顺序要求,但是随机事件数是一定要放在后的
(1)想要monkey运行24小时,每100毫秒发送一个事件,则需要发送的时间次数为:24*60*60*1000/100=864000(次)
6.Monkey测试能发现的问题:
monkey日志文件中搜索关键字:
(1)程序无响应,ANR问题:在日志中搜索“ANR” application not responding
(2)崩溃问题:在日志中搜索“CRASH”
(3)其他问题:在日志中搜索”Exception”