一、monkey简介
Monkey 就是SDK中附带的一个工具。Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。
二、monkey的基本使用
***前提具备Monkey环境
1、Monkey环境:
SDK目录下的platform-tools和tools目录要配置环境变量
1、搭建adb环境
(1)安装jdk,配置jdk环境变量:
A、系统变量→新建 JAVA_HOME变量 。变量值填写jdk的安装目录(默认是C:\Program Files\Java\jdk1.8.0_60)
B、系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)
C、系统变量→新建 CLASSPATH 变量。变量值填写 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (注意最前面有一点)
验证:cmd中输入java -version如果出来版本号即成功。
(2)下载Android SDK,解压。
配置SDK环境变量:
在path中添加Android SDK 安装路径中adb.exe的路径(即platform-tools文件夹所在目录)
验证:cmd中输入adb version如果出来版本号即成功。
注意: >在运行中输入cmd进入doc页面 ; >手机打开usb模拟点击功能
2、查看连接设备
输入以下命令可以查询已连接的设备与模拟器:
> adb devices
3、查找app包
列出手机装的所有app的包名:
> adb shell pm list packages
列出除了系统应用的第三方应用包名:
> adb shell pm list packages -3
使用 grep 来过滤:
> adb shell pm list packages | grep czb //如果提示:'grep' 不是内部或外部命令,也不是可运行的程序,则需要一下执行步骤
>adb shell //进入shell,退出使用 exit
shell@markw:/ $pm list packages -3 | grep "czb" 或者 pm list packages -3 | grep "czb"
注意:输入adb shell有肯不报错(如下图),也是因为没有打开usb调试模式
4、monkey压力测试
adb shell monkey -p 程序包 -v 测试次数
> adb shell monkey -p com.** -v 100
命令参数
1) -p (参数-p用于约束限制,用此参数指定一个或多个包)
2) -v (用于指定反馈信息级别,总共分3个级别)
3)-s (用于指定伪随机数生成器的seed值)
Monkey测试1:adb shell monkey -p com.htc.Weather –s 10 100
Monkey 测试2:adb shell monkey -p com.htc.Weather–s 10 100
两次测试的效果是相同的,但是操作序列是随机生成的, 但是只要我们指定了相同的Seed值, 就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的
4)--throttle <毫秒> (用于指定用户操作(即事件)间的时延,单位是毫秒)
5) --ignore-crashes (用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。)
6)--ignore-timeouts (用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。)
7)--ignore-security-exceptions(用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。)
8)--kill-process-after-error (用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。
9)--monitor-native-crashes(用于指定是否监视并报告应用程序发生崩溃的本地代码。)
测试实例
monkey -p com.czb.youfenqi --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 800 -v -v -v 200000 >C:/Users/*****/Desktop/monkey.txt
Monkey日志保存到PC中:
> adb shell monkey [option] <count> >d:\monkey.txt
5、执行结果
解释说明
$adb shell monkey -p com.** -v 100 (一个“-v”表示设定级别1,级别1会打印测试执行时的一些信息,例如发送给待测活动的事件。两个“-v”表示设定级别2,级别2会打印最详细的信息。)
: Monkey: send=1436429343575 count=100
# monkey在使用伪随机数产生器生成时间序列时,使用的种子是1436429343575,产生100个事件
: AllowPackage: com.****
# 指明指启动在“com.****”包中的活动(界面)
: IncludeCategory: android.intent.category.LAUNCHER
: IncludeCategory: android.intent.category.MONKEY
#指明只启动意图种类为“LAUNCHER”和“MONKEY”的活动
// Event percentages :
// 0: 15.0%
// 1: 10.0%
// 2: 2.0%
// 3: 15.0%
// ...
// 8: 2.0%
// 9: 1.0%
// 10: 13.0%
#显示将要产生的各种随机事件的比例,这个比例可以自定义。
:Switch:#Intent;action=android.intent.action.MAIN; category=android.intent.category.LAUNCHER; launchFlags=0×10200000; component=com.****/.activity.SplashActivity; end
//Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]
cmp=com.****/.activity.SplashActivity } in package com.****
: Sending Touch (ACTION_DOWN) : 0 :(239.0,773.0)
: Sending Touch (ACTION_UP) : 0 :(243.33736,792.59576)
: ...
: Sending Trackball (ACTION_MOVE) : 0 :(1.0,-2.0)
: Sending Touch #各种随机事件的日志输出,启动活动也是其中的一种事件。这里首先启动主界面并发送一些随机消息。
Events injected : 100
: Sending rotation degree=0, persist=false
: Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats : elapsed time = 1131ms (0ms mobile, 1128ms wifi, 3ms not connected)
// Monkey finished
#一些统计信息和最终测试报告
: Sending Touch (ACTION_DOWN) : 0 :(239.0,773.0)
6、查看结果
一般的测试结果分析:
1、 ANR问题:在日志中搜索“ANR”
2、 崩溃问题:在日志中搜索“Exception”
7、杀进程
命令:adb shell ps|grep monkey
kill + id