学院招生网站建设方案wordpress繁体
一、Monkey的概念
“猴子测试”是指没有测试经验的人甚至对计算机根本不了解的人(就像猴子一样)不需要知道程序的任何用户交互方面的知识,如果给他一个程序,他就会针对他看到的界面进行操作,其操作是无目的的、乱点乱按的。
这种测试方式在产品周期中的早期阶段会找到很多很好的bug,为用户节省不少的时间。
二、Monkey的介绍
它是Android系统自带一个命令行工具,可以运行在模拟器里或者真机设备中运行。
monkey向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。
三、monkey四大类
1.基本配置选项,如设置尝试的事件数量。
2.运行约束选项,如设置只对单独的一个包进行测试。
3.事件类型和频率。
4.调试选项
四、monkey命令特性
不可能使用monkey来指定做一样测试,重复做很多次。因为monkey产生的是伪随机的事件流。但是我们可以通过添加命令选项将操作限制在一定的范围内。
五、搭建环境
1.先下载jdk 具体安装流程请参考:https://blog.csdn.net/write6/article/details/79136388
2.再下载sdk 具体安装流程请参考:https://blog.csdn.net/u011541946/article/details/77142045
3.检验是否安装好-JDK和SDK
windows+r 输入cmd进入dos命令行
JDK:java -version

SDK:adb

六、实际操作
1.打开手机的开发者调试工具,用usb数据线链接手机或者使用模拟器
2.windows+r 输入cmd进入dos命令行
3.输入adb devices:查询序列号 出现类似下图的组合代表成功

4. 输入adb shell连接手机

或 adb -s 序列号 shell

5.查询手机APP包名:adb shell pm list packages命令用法(未连接手机在查询APP包名输入命令需要带上adb shell、已连接手机查询手机APP包名直接输入pm list packages命令)
|   序号  |   命令  |   含义  | 
|---|---|---|
| 1 |   adb shell pm list packages  |   查看当前连接设备或者虚拟机的所有包  | 
| 2 |   adb shell pm list packages -s  |   只输出系统的包  | 
| 3 |   adb shell pm list packages -3  |   输出所有第三方包  | 
| 4 |   adb shell pm list packages -f  |   输出包和包相关联的文件(安装路径)  | 
| 5 |   adb shell pm list packages -i  |   输出包和安装信息(安装来源)  | 
| 6 |   adb shell pm list packages “baidi”  |   输出包含过滤条件的包  | 
| 7 |   adb shell pm list packages -e  |   只输出启用的包  | 
| 8 |   adb shell pm list packages -d  |   只输出禁用的包  | 
| 9 |   adb shell pm list packages -u  |   只输出包和未安装包信息(安装来源)  | 
| 10 |   adb shell pm path packages  |   定位apk所在系统路径  | 
| 11 |   adb pull <remote> [<local>]  |   从手机把apk pull下来  | 
| 12 |   adb shell pm list packages --user <USER_ID>  |   根据用户id查询用户的空间的所有包,<USER_ID>代表当前连接设备的顺序,从零开始  | 
6.对包操作
1. 首先用一个最简单的mokey去试着找哪个是你想要的安装包名称
-p参数:表示指定测试的程序(空格后面跟安装包名字,拿刚才的第三方安装包一个个试)
-v参数:表示查看monkey执行过程的信息(日志级别)(-v 越多越详细,最多三个)
数字100:表示测试事件数为100
|   序号  |   命令  |   含义  | 
|---|---|---|
| 1 |   adb shell monkey -p tv.danmaku.bili 100  |   指定一个包  | 
| 2 |   adb shell monkey -p tv.danmaku.bili -p com.baidu.searchbox 100  |   指定多个包  | 
| 3 |   adb shell monkey -v 100  |   不指定包  | 
| 4 |   adb shell "ps | grep com.baidu.searchbox"  |   获取进程ID  | 
| 5 |   adb shell ps  |   查看所有进程  | 
| 6 |   adb shell dumpsys meminfo 包名,或者进程id  |   查看某个进程的内存占用情况  | 
| 7 |   kill -9 进程ID  |   杀死进程  | 
| 8 |   exit  |   退出 shell  | 
2.adb shell monkey -p tv.danmaku.bili -v 50 向b站发起随机点击50次
结果图:

Event percentages(事件百分比):
0:触摸事件百分比,参数--pct-touch
1:滑动事件百分比,参数--pct-motion
2:缩放事件百分比,参数--pct-pinchzoom
3:轨迹球事件百分比,参数--pct-trackball
4:屏幕旋转事件百分比,参数--pct-rotation
5:暂时不知道这个是什么
6:基本导航事件百分比,参数--pct-nav
7:主要导航事件百分比,参数--pct-majornav
8:系统事件百分比,参数--pct-syskeys
9:Activity启动事件百分比,参数--pct-appswitch
10:键盘翻转事件百分比,参数--pct-flip
11:其他事件百分比,参数--pct-anyevent
3.尽管monkey产生是伪随机事件流,但是我们希望我们的操作有一定的规律性,即按键、触屏等各类事件操作有所偏重
(1).对文本框操作,需要更多的按键操作。
(2).玩游戏,需要更多的点击和滑动操作。
| 序号 | ||||
|---|---|---|---|---|
| 1 |   --throttle  |   设定两个事件之间一个固定延迟,可以减缓monkey的执行速度 如果不指定,monkey将不会被延迟,事件将尽可能快地生成和发送消息。单位:毫秒  |   adb shell monkey --throttle 2000 -p tv.danmaku.bili 50 向B站发送50次随机事件,每次事件间隔为2秒  | ![]()  | 
| 2 |   --pct-touch  |   设定触屏事件生成的百分比。 触屏事件是一个有手指按下,抬起事件的手势  |   adb shell monkey --throttle 2000 --pct-touch 20 -p tv.danmaku.bili 50 向B站发送50次随机事件,每次事件间隔为2秒。其中设定触屏的事件占比为20%  | ![]()  | 
| 3 |   --pct-motion  |   设定滑动事件生成的百分比。 滑动事件是一个先在某一个位置手指按下,滑动一段距离后再抬起手指的手势  |   adb shell monkey --throttle 2000 --pct-motion 20 -p tv.danmaku.bili 50 向B站发送50次随机事件,每次事件间隔为2秒。其中设定滑动的事件占比为20%  | ![]()  | 
| 4 |   --pct-trackball  |   设定轨迹球事件生成的百分比。 轨迹球事件是包含一系列随机移动和单击事件的事件  |   adb shell monkey --throttle 2000 --pct-trackball 20 -p tv.danmaku.bili 50 向B站发送50次随机事件,每次事件间隔为2秒。其中设定轨迹球的事件占比为20%  | ![]()  | 
| 5 |   --pct-nav  |   设定基本导航事件生成的百分比。 基本导航事件是模拟方向性在设备上输入向上、向下、向左、向右的事件。  |   adb shell monkey --throttle 2000 --pct-nav 40 -p tv.danmaku.bili 50 向B站发送50次随机事件,每次事件间隔为2秒。其中设定基本导航事件的占比为40%。 monkety  | ![]()  | 
| 6 |   --pct-majornav  |   设定主要导航事件生成的百分比。 主要导航事件通常会导致UI产生回馈信息,如单击Back键、Home键、Menu键等  |   adb shell monkey --throttle 2000 --pct-majornav 30 -p tv.danmaku.bili 50 向B站发送50次随机事件,每次事件间隔为2秒。其中设定主要导航事件的占比为30%  | ![]()  | 
| 7 |   --hprof  |   指定了该参数,Monkey会在发送事件序列的前、后,生成性能分析报告。 通常会在data/misc目录下生成一个5MB左右大小的文件  | ||
| 8 |   --ignore-crashes  |   通常情况下,当应用程序发生任何超时错误(application not responding)时,monkey将停止运行。若指定了该参数,则monkey将会在产生错误信息后,继续向系统发送事件,直到指定事件全部运行完毕  | ||
| 9 |   --ignore-security-exceptions  |   通常情况下,指定应用程序发生许可错误时(如证书许可,网络许可等),monkey将停止运行。 若指定了该参数,即使应用程序发生许可错误,monkey会继续向系统发送事件,直到指定事件全部运行完毕  |   adb shell monkey --throttle 2000 --pct-trackball 50 -p tv.danmaku.bili 50 --ignore-security-exceptions 50  | ![]()  | 
| 10 |   --ignore-timeouts  |   忽略响应超时,ANR  | ||
| 11 |   --ignore-native-crashes  |   忽略本地代码崩溃  | ||
| 12 |   --monitor-native-crashes  |   监视崩溃时的本地代码  | 
4.对单独的APP进行测试
monkey -p tv.danmaku.bili --throttle 500 -s 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 200>/mnt/sdcard/monkey.txt

说明:
--throttle(毫秒)事件之间插入的固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定,Monkey将尽可能快的产生并执行事件。
-s 用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
--ignore-crashes 忽略程序崩溃。设置此选项后,Monkey会执行完所有的事件,不会因crash而停止。
--ignore-timeouts 忽略程序无响应。设置此选项后,Monkey会执行完所有的事件,不会因ANR而停止。
--ignore-security-exceptions 忽略证书或认证异常。设置此选项后,Monkey会执行完所有的事件,不会因认证或证书异常而停止。
--ignore-native-crashes 监视系统中本地代码发生的崩溃
--monitor-native-crashes 忽略本地代码导致的崩溃。设置忽略后,Monkey将执行完所有的事件,不会因此停止。
-v -v –v 提供最详细的设置信息
5.导出log到电脑
adb pull /mnt/sdcard/monkey.txt d:monkey.txt

6.分析log
日志开头:显示本次测试seed值,执行次数,测试包,

日志结尾:
如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;Monkey finished代表执行完成。(如果Monkey执行中断,在log的最后也能查看到当前已执行的次数。)

日志内容分析
一般测试结果分析-搜索关键字:
1.程序无响应,ANR问题:在日志中搜索“ANR”
2.崩溃问题:在日志中搜索“CRASH”
3.其他问题:在日志中搜索”Exception”
详细分析monkey日志
Switch--查看log中的Switch,主要是查看Monkey执行的是那一个Activity,两个swtich之间如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。
Sleeping--Sleeping for 500 milliseconds这是执行Monkey测试时,throttle设定的间隔时间,每出现一次,就代表一个事件。
重现问题
Monkey测试出现错误后,一般的查错步骤为以下几步:
1.找到是monkey里面的哪个地方出错
2.查看Monkey里面出错前的一些事件动作,并手动执行该动作
3.若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样







