Monkey测试环境搭建及使用

1. 什么是Monkey

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(eg:按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。

     Monkey测试是一种可以测试软件的稳定性、健壮性的快速有效的方法。(可以想象成一只猴子啥都不知道,疯狂乱敲

2. Monkey的特点

    Android系统自带,使用java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar,Monkey.jar程序是由一个名为”monkey”的shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey

(1)在CMD窗口查看monkey.jar:adb shell ls /system/framework

Monkey测试环境搭建及使用

(2)在CMD窗口查看monkey:adb shell ls /system/bin

Monkey测试环境搭建及使用

 

3. Monkey命令的简单帮助

要获取Monkey命令自带的简单帮助,在cmd中执行命令: adb shell monkey –help

4. Monkey原理

Monkey事件注入机制

Monkey注入系统事件是通过framework层的hidenApi(如activitemanager, inputmanager, windowmanager)获取系统服务,如下:

触摸事件:包括屏幕以及物理键的触摸,滑动,点击事件。

Monkey通过InputManager.getInstance().injectInputEvent(keyEvent, int);构造对应的事件,然后调用该接口执行事件。

Activity事件:是指我们调用Android系统组件的事件。

Monkey通过IActivityManager实例来获取activity的系统服务,从而启动某个activity。

IActivityManager am = ActivityManagerNative.getDefault();

am.startActivity();

Window事件:是指操作Window的事件,例如转屏。

Monkey通过获取IWindowManager实例开启系统窗口服务,并执行窗口事件。

IWindowManager wm = null;

wm = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));

wm..thawRotation();//窗口转屏

Monkey的组织结构

Monkey的核心类是Monkey.java,MonkeyEventSource.java,MonkeyEvent.java。

类名

描述

Monkey

程序的入口,同时也是调度中心,根据参数选择合适的MonkeyEventSource,并适时触发MonkeyEvent

MonkeyEventSource

MonkeyEvent的工厂,是一个接口,它有各种实现,例如随机生成MonkeyEvent,根据配置文件生成MonkeyEvent,根据网络数据生成MonkeyEvent等等

MonkeyEvent

各种事件的具体实现,是一个抽象类,不同事件有不同实现。在Monkey中各种活动都是事件,除了基本的触摸事件,Activity事件外,事件之间的停顿也是通过一个MonkeyThrottleEvent来实现。这样概念的扩展,将各种活动一视同仁的对待,使设计变得简单。

5. 环境搭建

1) 安装JDK

(1) 下载JDK:

https://www.oracle.com/technetwork/cn/java/javase/downloads/index.html

(2)  安装

(3) 配置环境变量,在“系统变量”中添加:

JAVA_HOME: 安装jdk的路径

CLASSPATH: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

在Path中添加:%JAVA_HOME%\bin” 和 “%JAVA_HOME%\jre\bin”

(4) 测试

输入java+回车,输出java的相关信息

Monkey测试环境搭建及使用

输入javac+回车,输出java编译的相关信息

Monkey测试环境搭建及使用

2) 下载Android sdk :

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

(1) installer_r24.4.1-windows.exe文件:

 https://pan.baidu.com/s/1OYnj6-69q-pUQa2Pt7-Sbw   提取码:2ju1

(2) 安装installer_r24.4.1-windows.exe

    里边有2个应用程序 ”SDK Manager.exe”(负责下载或更新SDK包)和” AVD Manager.exe”(负责创建管理虚拟机)

Monkey测试环境搭建及使用

(3) 运行”SDK Manager.exe”进行SDK下载

    刚开始选择10.0版,下载完后发现创建的模拟器无法启动,所以就下载了7.0版本,点击install packags开始安装(此处下载是为搭建虚拟机和环境变量做准备)

Monkey测试环境搭建及使用

Monkey测试环境搭建及使用

(4) 设置环境变量

a. 新建一个ANDROID_HOME的环境变量加入sdk的安装路径:

Monkey测试环境搭建及使用

b. 在系统变量Path中加入如下值:

Monkey测试环境搭建及使用

(5) 测试环境是否成功

运行DOS,输入:adb,出现如下结果,说明安装成功

Monkey测试环境搭建及使用

(6) 创建虚拟设备

a. 打开AVD Manager.exe

Monkey测试环境搭建及使用

b. 创建

Monkey测试环境搭建及使用

c. 运行虚拟设备

Monkey测试环境搭建及使用

点击后

Monkey测试环境搭建及使用

启动后Monkey测试环境搭建及使用

6. 压测

进入DOS

(1) 查看设备是否连接成功:

 adb devices

(2) 安装/卸载

安装:adb install 文件名.apk

卸载:adb uninstall 文件名.apk

(3) 获取包名:

显示所有apk包名包括系统:adb shell pm list package -f

显示正打开的程序:adb shell dumpsys window w | findstr \/ | findstr name=

(4) 压测

adb shell monkey -p your.package.name --throttle 500 -v -v -v 100 > d:MonkeyLog.txt

ps:

参数-p用于约束限制,用此参数指定一个或多个包

throttle 500——响应时间500ms

100是事件计数(即让monkey程序模拟100次随机用户事件)

-v -v -v 100 是一深度为三级输出测试信息,一个两个-v也可以效果不同

> d:MonkeyLog.txt——将log输出到d盘的MonkeyLog.txt文件

(5)  log分析

问题搜索:

a. 无响应问题:ANR

b. 崩溃问题:CRASH

c. 内存泄漏:GC

d. 异常问题:Exception