1. 什么是Monkey?
Monkey是 Android 中的一个命令行工具,可以运行在模拟器里或实际设备中。
它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。
Monkey测试通俗些的理解:可以认为 Monkey 这个工具就是一个猴子,它在 App 中乱按、乱摸、乱滚、乱跳。
通过这个工具可以模拟用户触摸屏幕、滑动轨迹球、按键等操作来对模拟器或者手机设备上的软件进行压力测试,检测该软件的稳定性、健壮性。
2. Monkey测试环境构建
(1). pc端下载adb命令包,并配置环境变量,path加上adb的目录路径 ,环境配置好后使用验证命令:
进行验证,无报错则说明配置成功
(2). jdk环境变量配置好使用验证命令:
进行验证,无报错则说明配置成功
(3). 手机已经打开开发者模式以及USB调试状态
(4). 把手机锁屏设置为从不
3. Monkey命令执行分解
首先我们清楚 Monkey 程序由 Android 系统自带,使用 Java 语言写成,在 Android 文件系统中的存放路径是:/system/framework/monkey.jar
而我们看到的 Monkey.jar 程序是由一个名为 “monkey” 的 Shell 脚本来启动执行
这个 Shell 脚本在 Android 文件系统中的存放路径是:/system/bin/monkey;
如下截图所示:
4. monkey命令的执行方式
运行 Monkey 的方式有四种:
(1). pc机上 adb shell monkey + 参数
例如:
上面这种方式比较常用
(2). pc机输入adb shell进入到手机的安卓设备后再 monkey + 参数
(3). 手机设备上安装一个模拟器手机执行 monkey+参数
(手机模拟器可以通过百度搜索或360手机助手搜android terminal,安装即可,可以在模拟器的命令行中输入mokey +参数)
(4). 脚本方式
Android 的 monkey test 工具提供了 -f scriptfile 参数,可以指定 test 脚本。在 monkey 的源码 MonkeySourceScript.java 中有一小段注释,里面给了一个不到 10 行例子:
monkey中提供的函数如下:
首先本地编写需要的测试的事件,命名为 monkey.script (文件格式无要求),将文件 push 到手机或模拟器的 sdcard 中
例如:
然后执行脚本:
Monkey 脚本支持的命令
脚本命令必须为小写字母
脚本命令以回车符作为一条命令的结束
5. monkey常用操作命令简介
如下截图所示:
6. 从手机上获取需要测试的package
7. Monkey的日志分析
(1). 问题定位
一般测试结果分析-搜索关键字:
程序无响应,ANR问题:在日志中搜索“ANR”
ANR 是 Android 的一个错误,在页面无法响应事件的时候会报出来。一般遇到这样的情况,表示当前有耗时操作在 UI 线程指定,导致卡UI了。
在 Monkey 中,如果遇上 ANR,同样会停止继续执行。如果想要忽略 ANR,让其触发的时候依然执行下去,可以使用 —ignore-timeouts 参数,同样它也会导致-s失效。
语句实例:
崩溃问题:在日志中搜索“CRASH”
正常来说,如果在 Monkey 执行的阶段,出现了崩溃,会立即停止接下去的执行。但是有时候,我们在执行Monkey的时候,是在无人员干涉的情况下,例如想要它执行一夜,等等情况。
那么如果出现崩溃就停止执行,明显不是我们需要的。在Monkey中,可以通过 —ignore-crashes 来忽略掉异常崩溃。
如果用此参数忽略了崩溃,在发生崩溃的时候,会继续指定,表现是又从新开始执行Monkey了,而同时,用-s设定的seed值将不会生效
语句实例:
其他问题: 在日志中搜索”Exception”
(2). 重现问题
Monkey测试出现错误后,一般的查错步骤为以下几步:
(3). 测试结果初步判断
monkey 执行时未加--ignore-crashes --ignore-crashes参数,就先浏览日志中Events injected: 值,查看当前已执行的次数,就知道有无bug
程序无响应的问题:在日志中搜索 “ANR”
崩溃问题:在日志中搜索 “Exception” ,在这里顺便提一下常见的Java异常:
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
违法访问错误:IllegalAccessError
内存不足错误:OutOfMemoryError
堆栈溢出错误:StackOverflowError
特殊场景说明:
应用程序 app 的压力/健壮性测试时:单个apk的,主要缩短 monkey 测试中事件与事件之间的延迟时间。
验证在快速的事件响应的过程中,程序是否能正常运行。将--throttle的值设定为500或者更小
(一般一次抬起和放下最快大概是300毫秒,这个时间无绝对),一般都使用500毫秒的延迟事件。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/15920.html