Android测试工具Monkey学习笔记

1 Monkey工具简介

Monkey的含义是“猴子”,测试行业对应的术语叫“猴子测试”。“猴子测试”是指没有测试经验的人甚至是对计算机根本不了解的人(像猴子一样)不需要知道程序的任何用户交互方面的知识,如果给他一个程序,他就会针对他看到的任何界面进行操作,当然其操作也是毫无目的的,乱点乱按,这种城市方式往往在产品周期的早期阶段会找到很多很好的缺陷,为用户节省不少时间。

Android官方对这只“猴子”的描述是这样的:Monkey是Google提供的一个命令行工具,可运行在模拟器或实际设备中。它向系统发送伪随机的用户事件,模拟用户的按键输入、触摸输入、手势输入等,从而对正在运行的应用系统进行压力测试,目的是看设备多长时间会出现异常,并观察系统的稳定性和容错性能。

Monkey是Android系统自带的一个命令行工具,用户主要是通过adb命令来启动Monkey,Monkey在运行时,会根据命令行参数的配置,生成伪随机事件流,并在Android设备上执行对应的测试事件。同时,Monkey还会对测试系统进行监测,当出现以下三种情况时会进行特殊处理:

l   如限定了Monkey运行在特定包上,当监测到试图转到其他包的操作,将对其进行阻止。

l   如应用系统程序崩溃或收到任何的失控异常,Monkey将记录对应的错误日志,并根据命令行参数判断是停止运行还是继续运行。

l   如果应用程序发生了程序无响应的错误Monkey将记录对应的错误日志,并根据命令行参数判断是停止运行还是继续运行。

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。

         Monkey是Android系统自带的一个命令行工具,可以运行在模拟器或实际设备中。Monkey可以向被测试的应用程序发送伪随机的用户事件流(如按键、触屏、手势等),实现对应用程序进行测试的目的。可以通过Monkey用随机重复的方法来对应用程序进行一些稳定性、健壮性方面的测试。

环境准备

2 环境准备

2.1 JDK安装与环境配置

JDK(JavaDevelopment Kit) 是 Java 语言的软件开发工具包。因为Android应用是使用Java语言进行开发的,而Java的核心就是JDK,所以我们需要先安装JDK。

1.         官网下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html

Android测试工具Monkey学习笔记_第1张图片

Ø  点击上图指示的两个位置的任意一个,跳转到如下界面,根据你的电脑系统选择对应的版本下载,在选择版本和下载之前需要先接收协议

Android测试工具Monkey学习笔记_第2张图片

2.   或者到http://jdk.android-studio.org/ 下载,可以下载以前的版本

Android测试工具Monkey学习笔记_第3张图片

3.   下载完成后,选择路径安装,注:不可以保存在中文路径下。

4.   安装完成后,进行环境配置;右键我的电脑—>属性—>高级系统设置—>环境变量

Android测试工具Monkey学习笔记_第4张图片

5.   系统变量—>新建,变量名:JAVA_HOME(代表JDK安装路径),变量值:JDK的安装路径

Android测试工具Monkey学习笔记_第5张图片

6.   系统变量—>新建,变量名:CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

Android测试工具Monkey学习笔记_第6张图片

7.   系统变量—>path—>点击编辑,变量值添加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

Android测试工具Monkey学习笔记_第7张图片

8.   命令行输入 java -version,出现如下结果即代表安装成功

2.2 SDK安装与环境配置

Android SDK指得是Android专属的软件开发工具包,是用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。

1.   官网下载(需):http://developer.android.com/sdk/index.html

2.   其他下载地址:http://www.androiddevtools.cn/

先找到SDK Tools,下载zip格式的,解压至目标路径位置即可;下载exe格式的,需双击安装

Android测试工具Monkey学习笔记_第8张图片

http://tools.android-studio.org/index.php/sdk

Android测试工具Monkey学习笔记_第9张图片

3.   解压或安装完成的目录如下图,AVD manager.exe是管理安卓虚拟机的程序;SDK manager.exe是用来管理sdk相关的工具、API等的

Android测试工具Monkey学习笔记_第10张图片

4.   双击运行SDK manager.exe,Android SDK Manage负责下载或更新不同版本的SDK包,默认安装的Android SDK Manager只安装了一个版本的sdk tools。

Android测试工具Monkey学习笔记_第11张图片

5.   打开AndroidSDK Manager,会自动获取可安装的sdk版本,但是未的情况下,有时候会出现获取失败的情况。

Android测试工具Monkey学习笔记_第12张图片

6.   获取失败的情况下,需要设置代理:

Ø  点击“Tools”>“Options...”

Ø  settings窗体中“HTTP Proxy Server”输入mirrors.neusoft.edu.cnHTTP;Proxy Port输入80,勾选Other中“Force https..”开头选项

Android测试工具Monkey学习笔记_第13张图片

7.   根据需要,选择工具;个工具的作用如下:

   Tools目录(必须的工具):

Ø Android SDKTools(必须,只需下载一个版本,一般选最新版本):基础工具包,版本号带rc字样的是预览版。

Ø Android SDKPlatform-tools(必须,只需下载一个版本,一般选最新版本):从android2.3开始划出此目录,存放公用开发工具,比如adb、sqlite3等,被划分到了这里。

Ø Android SDKBuild-tools(必须,可以安装多个版本):Android项目构建工具

   Android xxx(API xx)目录(可选的各平台开发工具): 

Ø Documentationfor Android Sdk(可选):安卓开发者官网的一些离线文档,不过下载下来打开也很慢。

Ø SDKPlatform(必须):对应平台的开发工具,需要在哪个版本的平台下开发就下载哪个。

Ø Samples forSDK(可选,此项在高版本tools中已不提供,需要在IDE里通过Import Sample引入,当然也可以下载离线版):内置的安卓示例程序,推荐安装。

Ø Sources forAndroid SDK(可选):安卓API的源代码,推荐安装。

Ø xxxxxxxx  Image(可选):各个以Image结尾的东西是支持相应平台的模拟器。

   Extras目录(可选的扩展):

Ø AndroidSupport Libraries(需要,高版本tools中已不见了,应该是集成到了别的地方):在低版本平台实现高版本平台控件效果时提供支持。

Ø AndroidSupport Repository(需要):主要是方便在gradle中使用Android Support Libraries,因为Google并没有把这些库发布到maven center或者jcenter去,而是使用了Google自己的maven仓库。

Ø Intel x86Emulator Accelerator(HAXM installer)(可选,但非常需要,需要CPU支持虚拟化技术支持):windows平台的Intel x86模拟器加速工具,配合Intel x86 atom/atom_64System Image使用可加快模拟器的运行速度。

Android测试工具Monkey学习笔记_第14张图片

8.   选择完成后,点击安装

Android测试工具Monkey学习笔记_第15张图片

9.   选择AcceptLicense后,点击安装

Android测试工具Monkey学习笔记_第16张图片

10. 开始下载

Android测试工具Monkey学习笔记_第17张图片

11. 下载完成

Android测试工具Monkey学习笔记_第18张图片

12. Intel x86Emulator Accelerator(HAXM installer)相关配置

Ø  开机按F2或delete键进入BIOS-CPU设置里,将Intel 虚拟化技术开启

Android测试工具Monkey学习笔记_第19张图片

Ø  如在Android SDK Manage出现如下显示,无法直接安装Intel x86 Emulator Accelerator(HAXM installer)

Android测试工具Monkey学习笔记_第20张图片

Ø 到官网下载安装包进行安装https://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager-intel-haxm

Android测试工具Monkey学习笔记_第21张图片

13. 安装完成后,进行环境配置;右键我的电脑—>属性—>高级系统设置—>环境变量

Android测试工具Monkey学习笔记_第22张图片

14. 系统变量—>新建,变量名:ANDROID_HOME,变量值:SDK的安装路径

15. 系统变量—>path—>点击编辑,变量值添加:;%ANDROID_HOME%\build-tools\25.0.3;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

Android测试工具Monkey学习笔记_第23张图片

16. 在命令行窗口输入“adb”,能显示adb帮助信息,则表示Monkey环境配置成功

Android测试工具Monkey学习笔记_第24张图片

3Monkey参数

         Monkey启动的命令行脚本为:monkey [options] 

         其中,options表示Monkey执行的可配置参数,是可选项(如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包);count表示Monkey执行的事件数,为必选项。

         Options可简单划分为五类:基本配置类参数、事件类型和频率参数、约束限制类参数、调试类参数和官方隐藏类参数。

3.1 基本配置类参数

         Monkey的基本配置类参数包括帮助参数和日志信息参数。

         -help

输出Monkey的命令行使用方法

Android测试工具Monkey学习笔记_第25张图片

         -v

表示反馈信息的级别,Monkey命令行中每增加一个-v参数,Monkey日志反馈信息的级别就会对应增加一个Level。

Ø  Level 0(缺省值):除启动提示、测试完成和最终结果之外,提供较少信息。

Ø  Level 1(-v-v):提供较为详细的测试信息,如逐个发送到Activity的事件。

Ø  Level 2(-v-v-v):提供更加详细的设置信息,如测试中被选中的或未被选中的Activity等。

3.2 事件类型和频率参数

Monkey的事件类参数的作用是对随机事件进行调控,从而使其遵照设定运行,如设置各种事件的百分比、设置事件生成所使用的种子值等。频率参数主要限制事件执行的时间间隔。

Monkey所执行的随机事件流中包含11大事件,分别是触摸事件、手势事件、二指缩放事件、轨迹事件、屏幕旋转事件、基本导航事件、主要导航事件、系统按键事件、启动Activity事件、键盘事件、其他类型事件。Monkey通过这11大事件来模拟用户的常规操作,对手机APP进行稳定性测试。

         -s

         伪随机数生成器的种子值,如果用相同的种子值再次运行Monkey,它将生成相同的事件系列。在没有指定随机种子时,默认使用的种子时0。

         重现问题是测试人员经常会面对的一件事情,在使用Monkey时一定掌握好“-s”参数的应用,可以使用Excel表格对其进行记录和管理,样式如下(最好依据自己的实际情况和需求进行设定)。

      Android测试工具Monkey学习笔记_第26张图片  

         --throttle

在事件之间插入固定延迟,通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将会尽可能快地被生成。

         --pct-touch

         设定触摸事件的百分比,触摸事件是一个有手指按下、抬起事件的手势,它发生在屏幕上的某个单一位置,在手机上看到的实际操作类似于点击。

         Monkey执行触摸事件对外输出的日志由一个ACTION_DOWN和一个ACTION_UP事件组成:

        

         --pct-motion< percent >

设定滑动事件的百分比,滑动事件是一个先在某一个位置手指按下,滑动一段距离后再抬起手指的手势,在手机上看到的实际操作是一个没有拐弯的直线滑动操作。

Monkey执行滑动事件对外输出的日志由一个ACTION_DOWN事件、一系列ACTION_MOVE事件和一个ACTION_UP事件组成:

Android测试工具Monkey学习笔记_第27张图片

         --pct-pinchzoom< percent>

         设定二指缩放事件的百分比,二指缩放事件是指在屏幕上的两处按下,并同时移动,最后同时抬起的操作,即智能机上的放大缩小手势操作。

         Monkey执行二指缩放事件对外输出的日志:起始是一个ACTION_DOWN事件和一个ACTION_POINTER_DOWN事件,即模拟两个手指同时点下;中间是一系列的ACTION_MOVE事件,即两个手指同时在屏幕上直线滑动;结束时由一个ACTION_POINTER_UP事件和一个ACTION_UP事件组成,即两个手指同时放开:

Android测试工具Monkey学习笔记_第28张图片

         --pct-trackball< percent>

         设定轨迹事件的百分比,轨迹事件由一个或几个随机的移动组成,有时还伴随点击。很早之前的Android手机带有轨迹球,这个事件就是模拟的轨迹球的操作。现在的手机几乎都没有轨迹球,但是轨迹球事件中包含曲线滑动操作,如果被测程序需要曲线滑动时可以选用此参数。

         Monkey执行轨迹事件对外输出的日志由一系列的Trackball(ACTION_MOVE)事件组成:

        

         --pct-rotation< percent >

         设定屏幕旋转事件的百分比,屏幕旋转事件是一个隐藏事件,在Android官方文档中并没有记录这个事件。它其实是模拟的Android手机的横屏和竖屏切换。

         Monkey执行屏幕旋转事件对外输出的日志由一个rotation事件组成,其中degree表示的是旋转方向,顺时针旋转,0表示旋转90度的方向,1表示旋转180度的方向,2表示旋转270度的方向,3表示旋转360度的方向:

        Android测试工具Monkey学习笔记_第29张图片

         --pct-nav< percent >

         设定基本导航事件的百分比,基本导航事件是指点击方向输入设备的上、下、左、右按键的操作,现在的手机上很少有上、下、左、右按键,这种事件一般用的比较少。

         Monkey执行基本导航事件对外输出的日志由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)事件组成:

     Android测试工具Monkey学习笔记_第30张图片   

         --pct-majornav< percent >

设定主要导航事件的百分比,主要导航事件通常会导致UI产生回馈事件,如键盘的中间按键、回退按键、菜单按键。

Monkey执行主要导航事件对外输出的日志由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)事件组成:

Android测试工具Monkey学习笔记_第31张图片

         --pct-syskeys< percent >

         设定系统按键事件的百分比,这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键。

         Monkey执行系统按键事件对外输出的日志由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)事件组成:

 Android测试工具Monkey学习笔记_第32张图片       

         --pct-appswitch< percent>

         设定启动Activity事件的百分比,启动Activity事件是指在手机上启动一个Activity的操作。在随机的时间间隔中,Monkey将执行一个startActivity()方法,作为最大限度上覆盖被测包中全部Activity的一种方法。

         Monkey执行启动Activity事件对外输出的日志由一个Switch操作组成,如打开com.android.settings这个应用的一个com.android.settings.Settings的Activity界面:

   Android测试工具Monkey学习笔记_第33张图片     

         --pct-flip< percent >

         设定键盘事件的百分比,键盘事件如点击输入框、键盘弹起、点击输入框以外区域、键盘收回等。

         --pct-anyevent< percent >

         设定其他类型事件的百分比,包罗了所有其他类型的事件,如按键、其他不常用的设备按钮等。

3.3 约束限制类参数

         约束限制类参数的作用是将随机事件运行的范围限制在一个或多个包或类中。

         -p<包名>

         如果用此参数指定了一个或几个包(Package,即App),Monkey将只允许系统启动这些包里的Activity。如果应用程序还需要访问其他包里的Activity,那些包可需要再此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个-p选项,每个-p选项只能用于一个包。

         -c<类别名>

         如果此参数指定了一个或几个类别(Category),Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选择下列类别中列出的Activity:Intent.CATEGORY_LAUCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选项只能用于一个类别。

 

3.4 调试类参数

         通过调试类命令,可以对Monkey进行一些简单的调试,可以快速定位Monkey执行过程中的一些问题。

         --dbg-no-events

         设置此选项,Monkey将执行初始启动,进入一个测试Activity,不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约束,以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个可以监视应用程序所调用的包之间的转换的环境。

         --hprof

         设置此选项,将在Monkey事件执行之前和执行之后生成内存快照文件存放于手机的data/misc目录。通过对比执行前后的内存快照文件,可以协助定位内存泄漏问题。由于内存快照文件比较大,所以要小心使用。

         --ignore-crashes

         通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

         --ignore-timeouts

         通常,当应用程序发生任何超时错误(如出现“Application Not Responding”对话框)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。

         --ignore-security-exceptions

         通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity),Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。

         --kill-process-after-error

         通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。

         注意:当Monkey正常执行完毕后,它不会关闭所启动的应用,设备仍然保留其最后接收到的消息状态,所以建议用户在执行命令以后为保持应用的初始状态,需手动或脚本程序将已打开的应用进行关闭。

         --momitor-native-crashes

         监控并报告Android系统中本地代码的崩溃事件。如果设置了—kill-process-after-error,系统将停止运行。

         --wait-dbg

         停止执行中的Monkey,直到有调试器和它相连接。

3.5 官方隐藏类参数

         在Android官网上还有三个参数时看不到说明的,即为隐藏参数。

         --pkg-blacklist-file<黑名单文件>

         限制Monkey不测试于指定黑名单文档中记录的包(Package)。若没有使用这个参数,Monkey会测试系统内所有的包。若使用了该参数,可通过在黑名单文档内记录所有不要测试的包名称,来限制Monkey的执行范围。黑名单文档中每一行只能放一个包名。

         --pkg-whitelist-file<白名单文件>

         限制Monkey只测试于指定的白名单文档中记录的包(Package)。若没有使用这个参数,Monkey会测试系统内所有的包。若使用了该参数,可通过在白名单文档内记录所有要测试的包名,来限制Monkey的执行方位。白名单文档中每一行只能放一个包名。

         注意:若要测试的包与其他的包有关联,则必须一起指定这些包来执行这项参数。

         -f<脚本文件>

         指定Monkey执行用户自定义的脚本文件。

3.6 Monkey综合示例

         例子:adb shell monkey –ignore-crashes –ignore-timeouts–kill-process-after-erro –ignore-security-exceptions –throttle 1000 –v –v –v –s5 1000000,这条命令就是向系统发送1000000次随机事件,各随机事件的时间间隔为1秒钟,它的种子时5,测试过程中忽略相关的安全、超时、崩溃等异常。

4Monkey启动

         Monkey启动方式很简单:先连接被测手机到PC上或直接在PC上打开被测模拟器,然后打开CMD窗口输入对应的adb命令行即可。

         通过命令行启动Monkey有两种方式:

l   直接PC启动

l   Shell端启动

         这两者的区别是,通过PC端启动,Monkey运行日志可以保存在PC上;通过Shell端启动,Monkey运行日志可以保存在手机里。

         注意:Monkey启动后会不断向被测对象发送随机事件流,直到事件执行完毕或者发生异常时才停止。在Monkey运行过程中,即便断开与PC的连接,Monkey依然可以在手机上继续运行。

         停止Monkey的方法是:直接杀掉手机上的Monkey进程。具体方法如下:

        

         获取到进程的ID:pid

        

5 Monkey日志分析

Monkey日志分析是Monkey测试中非常重要的一个环节,通过日志分析,可以获取当前测试对象在测试过程中是否发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和解决问题。

5.1 日志的保存方法

         Monkey运行日志常见的保存方法有三种:

l   保存在PC中,代码如下:

执行以上命令,Monkey的运行日志将会保存在PC上的D盘下的一个monkey.txt文件中。

l   保存在手机中,代码如下:

执行以上命令,Monkey的运行日志将会被保存在手机的SD卡上的一个monkey.txt文件中。

l   标注流与错误流分开保存,代码如下:

执行以上命令,Monkey的运行日志和异常日志将会被分开保存。此时Monkey的运行日志将会保存在monkey.txt文件中,而异常日志将会被保存在D盘下的error.txt中。

5.2 日志内容解析

         Monkey运行时输出的日志一般包含四类信息,分别是测试命令信息、伪随机事件流信息、异常信息、Monkey执行结果信息。

1)        测试命令信息

         Monkey启动后会输出当前所执行命令的各种参数信息,其中包括种子(Seed)信息、事件数量、可运行的应用列表以及各事件百分比等。

Android测试工具Monkey学习笔记_第34张图片

2)        伪随机事件流信息

         当Monkey开始执行测试后,会顺序输出执行的事件流信息。

Android测试工具Monkey学习笔记_第35张图片

3)        异常信息

         当Monkey执行过程中遇到错误时,会输出对应异常信息。

Android测试工具Monkey学习笔记_第36张图片

4)        Monkey执行结果信息

         当Monkey执行完所有事件后,会输出执行结果信息,其中包括执行的事件数量、旋转的角度、网络状态以及Monkey最终的执行结果。

Ø  执行成功结果信息

Android测试工具Monkey学习笔记_第37张图片

Ø  执行失败结果信息

Android测试工具Monkey学习笔记_第38张图片

5.3 日志异常信息查找

         Monkey执行过程中常见的错误类型主要有两类:应用程序无响应(ANR)和崩溃(Crash)。

         ANR是指当Android系统监测到应用程序在5秒内没有响应输入的事件或广播在10秒内没有执行完毕时抛出无响应提示。

         Crash是指当应用程序出现错误时导致程序异常停止或退出的情况。

         要统计Monkey日志中错误出现的次数只要搜索关键字“ANR”和“CRASH”出现的次数即可。由于通常Monkey测试的日志会比较大,日志内容也非常多,为了简化统计操作,可以使用bat脚本进行统计。

        Android测试工具Monkey学习笔记_第39张图片

         最终执行后,在脚本目录下回生成Result.txt文件记录异常出现的次数。

Android测试工具Monkey学习笔记_第40张图片

         根据统计结果,可以得到Crash和ANR出现的次数,以及出现在哪些日志文件中,出现该错误的包名。如果需要更详细的错误信息,可以打开对应的Monkey日志文件查询。通过详细日志信息,可以定位到引起Crash的原因,以及出现Crash的代码行的信息。下面是一些常见的Crash错误信息:

Android测试工具Monkey学习笔记_第41张图片

6 测试执行

1.         手机已连接到PC,或者已启动模拟器

2.         将准备好的应用程序(apk文件),复制到android sdk对应platform-tools的目录下

3.         安装应用程序,adb命令下安装apk文件的命令为:adb install 文件名.apk

4.         安装好后,会在手机或模拟器上看到应用程序的启动图标

5.         安装好apk文件后,需要知道应用程序主Activity(第一个启动的Activity)所在的包名。执行下图命令可以获取设备里的所有包名,需要root,root命令为:su root

Android测试工具Monkey学习笔记_第42张图片

6.         之后就可以按照自己设置的monkey命令执行测试了。

你可能感兴趣的:(Android,android,monkey)