当前位置:网站首页 > 技术博客 > 正文

monkey测试(推荐一款好用的APP性能测试工具——Monkey!)



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毫秒的延迟事件。

版权声明


相关文章:

  • 代码对比工具(🛠️在线代码比较工具-轻松查找代码差异🔍)2024-10-30 23:01:02
  • 数据库有哪些?2024-10-30 23:01:02
  • 前端实现权限管理2024-10-30 23:01:02
  • java bitset用法2024-10-30 23:01:02
  • 位图索引是什么2024-10-30 23:01:02
  • linuxcp命令使用方法2024-10-30 23:01:02
  • leveldb(一文彻底搞懂leveldb架构)2024-10-30 23:01:02
  • 线程池java原理2024-10-30 23:01:02
  • iframe(【HTML】深入全掌握 iframe:了解 its 技术原理、优缺点、最佳应用场景及实战指南)2024-10-30 23:01:02
  • monkey测试(超详细的Monkey测试介绍)2024-10-30 23:01:02