Android稳定性测试利器Monkey使用详解

1.简介

Monkey是Android系统自带的一款稳定性测试小工具,简单易用

2.环境搭建

(1)下载Android SDK
(2)将Android SDK目录下的platform-tools和tools目录配置到系统环境变量Path中
(3)打开cmd窗口,输入adb命令,查看环境是否配置成功,如下图所示,则环境配置成功

Android稳定性测试利器Monkey使用详解_第1张图片
image.png

3.Monkey启动

(1)最简单的例子:命令行中输入 adb shell monkey 1000后,你会发现手机(或者虚拟机)自动运行起来了,命令行也会输出相关的日志。

Android稳定性测试利器Monkey使用详解_第2张图片
image.png

(2)标准的Monkey命令:monkey [options]
其中 options表示Monkey执行可配置的参数,是可选项,如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包, count表Monkey执行的事件数, 必须设置
(3) options的类型及其使用
下面将Monkey的Options操作分为四类:常规类,事件类,约束类和调试类。

常规类命令 使用 详解
-h adb shell monkey -h 显示monkey参数帮助信息
-v adb shell monkey -v -v -v 打印出日志信息,每个-v将增加反馈信息的级别,-v越多日志信息越详细:0级,除启动提示、测试完成和最终结果提供较少信息。1级,提供较详细调试信息,比如逐个发送到Activity的事件。2级,提供更详细安装信息,如测试中被选中或未被选中的Activity
事件类命令 使用 详解
-f adb shell monkey -f<测试脚本名> 表示要使用Monkey运行指定的脚本
-s adb shell monkey -s 指定随机数生成器seed值,如果用相同的seed值再次运行moneky,将重复执行刚才的随机操作
--throttle adb shell monkey --throttle<时间间隔> 表示每执行一个指令间隔的时间,单位ms,注意是-“--”开头
--pct-touch adb shell monkey --pct-touch 表示触摸事件百分比
--pct-motion adb shell monkey --pct-motion 表示动作事件百分比
--pct-trackball adb shell monkey --pct-trackball 表示轨迹球事件百分比
--pct-nav adb shell monkey --pct-nav 表示基本导航事件百分比
--pct-majornav adb shell monkey --pct-majornav 表示主要导航事件百分比
--pct-syskeys adb shell monkey --pct-syskeys 表示系统按键事件百分比
--pct-appswitch adb shell monkey --pct-appswitch 表示应用启动事件百分比
约束类命令 使用 详解
-p adb shell monkey -p<一个或者多个包名> 指定测试一个或者多个包
-c adb shell monkey -c<一个或者多个类别> 指定测试一个或者多个类别(即参数)
调试类命令 使用 详解
--dbg-no-events adb shell monkey --dbg-no-events 监视应用程序所调用的包之间的转换
--hprof adb shell monkey --hprof 在事件序列前后立即生成profiling report,在data/misc中生成5MB大小左右的文件
--ignore-crashes adb shell monkey --ignore-crashes 设置后,当应用程序崩溃或者发生异常的时候,Monkey将继续运行直到计数完成,而不会停止运行
--ignore-timeouts adb shell monkey --ignore-timeouts 设置后,当应用程序发生任何超时错误(比如ANR),Monkey将继续运行直到计数完成,而不会停止运行
--ignore-security-exceptions adb shell monkey --ignore-security-exceptions 设置后,当应用程序发生任何相关权限错误的时候,Monkey将继续运行直到计数完成,而不会停止运行
--monitor-native-crashes adb shell monkey--monitor-native-crashes 设置后,monkey会监视并报告Android系统的native code的崩溃事件

(4)Moneky脚本的编写

事件 使用 详解
点击事件 DispatchPointer ( downTime , eventTime , action , x , y , pressure , size , metaState , xPrecision , yPrecision , device , edgeFlags) 其实这么多参数,只需要关注action 、 x 、y 三个参数即可。action :事件是按下还是抬起,0 表示按下,1 表示抬起。x、y:表示当前事件触发的X轴和Y轴的坐标
输入字符串事件 DispatchString(String text) 输入一个不加引号的字符串
启动应用 LaunchActivity ( pkg_name , act_name ) 用于打开任意应用的一个页面,但是前提条件是打开的Activity 需要属性 android:exported 被设定为true,才可以通过 LaunchActivity 打开
等待事件 UserWait(long sleeptime) 操作需要等待的事件,单位为毫秒
按下键值 DispatchPress(int keycode) 用于模拟敲击键盘的事件
长按键值 LongPress(int keycode) 用于模拟敲击键盘的事件

(5)准确地获取控件坐标
方法一:
因为Monkey是基于坐标来操作控件的,所以必须准确地获取控件坐标才能进行正确测试。这里就需要getevent。在命令行上输入adb shell getevent后,然后点击手机界面,会获得所点击的位置的十六进制坐标。

Android稳定性测试利器Monkey使用详解_第3张图片
image.png

比如上图,我点击点一个文本框后输入的一系列数据(看起来好乱和复杂),每一行的三个数据分别代表type,code,value(具体的含义自己百度一下,这里就不多解释),然后其实我们只需要关注的是code为0035和0036这两行的数据,分别代表触屏时的绝对坐标X和Y,然后将它们转为十进制的坐标就可以了,就这样我们得到了控件的x和y坐标。

方法二:我推荐另外一种更简单的方式,来获取当前你看见的,在待测试设备上的控件的坐标点的定位方式。那就是利用 Android 设备的开发者选项。设置 → 开发者选项 → 指针位置 ,将这个属性开启之后,当手指在屏幕上滑动的时候,就可以在顶部看到当前触摸点的 X、Y 轴的坐标,这就是我们需要的。

Android稳定性测试利器Monkey使用详解_第4张图片
Paste_Image.png

(6)Monkey日志分析

  • 正常情况: 如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成\
  • 异常情况:Monkey 测试出现错误后,一般的分析步骤:
    1.程序无响应的问题: 在日志中搜索 “ANR”
    2.崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bug

4.Monkey简单实战

下面我们写一个简单的Monkey脚本进行测试:就是两个Activity页面,第一个页面输入EditText,然后第二个页面显示第一个页面的信息。(相信这部分代码对各位大佬来说很简单,就不粘贴出来了)

Android稳定性测试利器Monkey使用详解_第5张图片
image.png
Android稳定性测试利器Monkey使用详解_第6张图片
image.png

思路:

(1)选中文本框1
captureDispatchPointer(10,10,0,308,215,1,1,-1,1,1,0,0)
captureDispatchPointer(10,10,1,308,215,1,1,-1,1,1,0,0)
(2)往文本框1中输入内容
captureDispatchString(111)
captureDispatchPress(66)
(3)选中文本框2
captureDispatchPointer(10,10,0,197,295,1,1,-1,1,1,0,0)
captureDispatchPointer(10,10,1,197,295,1,1,-1,1,1,0,0)
(4)往文本框2中输入内容
captureDispatchString(222)
captureDispatchPress(66)
(5)点击提交按钮
UserWait(500)
captureDispatchPointer(10,10,0,264,403,1,1,-1,1,1,0,0);
captureDispatchPointer(10,10,1,264,403,1,1,-1,1,1,0,0);
(6)全部代码

Android稳定性测试利器Monkey使用详解_第7张图片
Paste_Image.png

(7)运行脚本,比如下面指定执行脚本10次,输出相关日志信息

Android稳定性测试利器Monkey使用详解_第8张图片
Paste_Image.png

5.Monkey总结

优点:功能强大, 主要用于压力和稳定性测试
缺点:本身不提供截屏功能,本身无法完成录制、回放的功能(不过都可以借用其他的开源工具来实现Monkey的截屏和录制等功能)
不支持条件判断,不支持读取待测界面的信息来执行验证操作

你可能感兴趣的:(Android稳定性测试利器Monkey使用详解)