Monkey测试流程与问题定位
文章目录
1、什么是Monkey测试
Monkey测试,也称为猴子测试,android自动化测试的一种手段,它通过模拟用户的各种随机操作来测试软件的稳定性和健壮性,模拟用户的按键输入、手势输入,看app在长时间测试后是否会出异常。
Monkey测试,也是一种压力测试和稳定性测试,压力测试表现在,在一定的时间内进行大量的操作,稳定性测试表现在长时间的运行monkey测试,软件是否出现异常行为。
2、Monkey测试的特点
- 随机测试(模拟人的所有操作 )
Monkey测试通过随机生成一系列用户操作事件,如触摸屏幕、按键输入、滑动等,来模拟用户的交互行为,由于事件是随机生成的,因此很难预测测试的确切路径和结果,这有助于揭示那些在常规测试中可能被忽略的问题。随机性确保了测试可以覆盖到应用程序的多个方面,包括那些不常用的功能和操作路径,从而提高测试的全面性。
- 整机进行app的随机测试
整机测试指的是对整个设备进行的一系列随机操作测试,以评估设备在随机用户事件流的影响下的稳定性和性能。这种测试不仅限于单个应用程序,而是覆盖设备上所有可操作的应用程序和系统组件。
3、执行Monkey测试的阶段
执行Monkey测试的阶段为项目基本稳定的情况、或项目验收前
项目的基本功能已经实现并且相对稳定之后,才能进行Monkey测试可以确保在已有功能上进行压力测试,如果项目中存在许多未解决的bug或者功能尚未完善,Monkey测试可能会产生大量的错误报告,这些报告很难区分是Monkey测试引入的问题还是原有功能的问题,从而增加了调试的难度。
Monkey测试通常在项目验收前进行,以确保应用在上线前具备必要的稳定性和质量标准,可以减少软件上线后出现的崩溃、卡死等现象,从而保护品牌口碑、提高用户留存和用户体验。
4、Monkey测试工具的安装
- 安装java环境(安装jdk)并配置jdk的环境变量,dos窗口输入:java -version 显示对应的版本号则安装成功
安装jdk ++https://www.oracle.com/cn/java/technologies/downloads/#java8++
编辑配置环境变量
【open -e ~/.bash_profile】
在打开的配置文件中,添加以下行来设置JAVA_HOME环境变量,并更新PATH变量:
【export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home】
【export PATH=JAVA_HOME/bin:PATH】
command+s保存,然后退出文件
保存对配置文件的更改,并使其生效
【source ~/.bash_profile】
输入以下命令,防止退出终端后失效
【source ~/.zshrc】
然后,点"i",进入编辑模式,在文档最后一行添加下面那句话
【source ~/.bash_profile】
然后按"esc"退出编辑模式,然后":wq",保存并退出文件
检查JDK版本
【java -version】

- 安装SDK环境并配置SDK的环境变量,dos窗口输入:adb version 显示对应的版本号则安装成功
安一下android-platform-tools
输入:【brew install --cask android-platform-tools】
前提是已经安装了homebrew,没安装的安装一下,参考一下别的文章,这步不怎么难,没啥坑
配SDK环境变量
打开配置文件:【nano ~/.zshrc】
在末尾加上
【export ANDROID_HOME=/Users/admin/Library/Android/sdk】
【export PATH={PATH}:{ANDROID_HOME}/tools】
【export PATH={PATH}:{ANDROID_HOME}/platform-tools】
输入一下命令,使改动生效
【source ~/.zshrc】
检查是否安装
【adb version】

5、如何进行Monkey测试
首先,将被测设备与电脑连接,用adb devices查看是否连接成功

monkey测试的常用adb命令
- adb shell monkey count , 对整机随机测试,生成 count 个随机事件。例如adb shell monkey 300
- adb shell monkey -p 包名 次数, 针对某个应用程序进行测试。
如何获取包名
- adb shell pm list package -3,获取安装到系统的应用程序app列表。
- 忽略异常
- --ignore-crashes,忽略crash。
- --ignore-timeouts,忽略响应超时(ANR)。
- --ignore-security-exceptions,忽略安装证书,使用上述三个命令的作用是,即使应用程序崩溃或发生异常,Monkey测试也会继续运行,直到完成指定的事件计数。这个选项允许测试在遇到应用崩溃的情况下继续进行,以便能够完成更多的测试事件,从而更全面地评估应用的稳定性和健壮性。但测试结束后,会在日志中记录遇到的异常。
- 动作百分比设置
- --pct-touch PERCENT,用于设置屏幕上的单个位置的【按下和抬起事件】的百分比;例--pct touch 40。
- --pct-motion PERCENT,用于设置屏幕上某处的【按下之后滑动再抬起】事件的百分比。
- --pct-syskeys PERCENT,用于设置系统按键事件的百分比,系统按键事件包括如 【Home、Back及音量控制键等】系统保留的按键操作。通过调整这个参数,可以模拟用户在使用这些系统按键时的行为,这对于测试应用对系统按键的响应和兼容性非常重要。
- --pct-nav PERCENT ,用于设置导航键事件的百分比,通常用于在【列表或菜单中上下移动选择项】。
- --pct-majornav PERCENT,模拟【系统级别的导航事件】,通常包含Back键、Home键。
- --pct-appswitch PERCENT,在同一个【应用内部从一个页面(Activity)切换到另一个页面(Activity)】的过程,Activity通常包含一个或多个用户界面元素,如按钮、文本框、列表等。这个值决定了在Monkey测试中启动新Activity的事件所占的比例。如果该事件比例设置得较低,测试可能会大部分时间停留在同一个页面上,目的是最大化覆盖被测应用包中全部 Activity,确保测试能够触及应用中的各个界面和功能。
- --pct-flip PERCENT,用于指定键盘事件的百分比,包含【点击输入框、键盘弹起】等事件。
- --pct-anyevent PERCENT,用于设置【任意事件(any event)】的百分比,包括但不限于触摸、按键等。
- --pct-pinchzoom PERCENT,用于设置【捏合缩放(pinch zoom)】事件的百分比,模拟用户通过用两个手指在屏幕上做相反方向的滑动来放大或缩小内容。
- -s SEED,用于设置伪随机数生成器的种子值,控制执行事件的随机性。shell monkey -s 28 1000 这条命令将使用种子值 28 来生成 1000 个事件,可以在后续的测试中使用28这个种子值来重现相同的测试序列,这有助于定位和修复问题。可以使用当前时间的时间戳【date +%s】作为种子值,这样每次运行程序时,生成的种子值都会不同,从而产生不同的随机数序列。
- -v \[-v ...]>文件路径,-v 参数用于增加测试的详细输出级别,导出日志到指定文件中。每次使用 -v 参数,都会增加日志的详细程度,提供更多的信息以便于调试和分析测试结果。不使用 -v 参数时,Monkey 测试会输出基本的统计信息,如测试持续时间、事件总数和应用崩溃次数等。使用一次 -v 会提供基本的事件和结果的输出,例如每个事件的类型和目标 Activity。使用两次 -v会提供更详细的输出,包括事件的详细信息和应用的状态变化。使用三次-v会显示应用崩溃的详细信息,包括堆栈跟踪和错误消息。
- --throttle MILLISEC,用于设置 Monkey 测试中事件之间的最小延迟时间,MILLISEC 是一个整数,单位是毫秒,这个参数可以帮助你控制测试的速度,使其更接近真实用户的操作速度。例如--throttle 200
6、最终adb命令参考
adb shell monkey -v //一级日志 -s 123//种子值 -p com.kanzhun.marry//包名 --throttle 100//操作延时 --ignore-crashes --ignore-timeouts//忽略crash和anr --pct-touch 30//点触 --pct-motion 20//滑动 --pct-syskeys 10//系统按键 --pct-majornav 5//系统导航 --pct-appswitch 40//界面切换 3000//事件数 > /Users/admin/Documents/monkey/output.txt 2> /Users/admin/Documents/monkey/error.txt//分流保存
7、Monkey测试的测试分析
- 次数设置,工作中一般事件次数设置多少合适?
用户正常操作的事件延时为300毫秒。
monkey测试执行1小时,延迟为300毫秒,可设置的事件数为12001。
monkey测试执行0.5小时,延迟为300毫秒,可设置的事件数为6001。
可以下班的时候执行,可进行较长时间的monkey测试。
- 结果分析
- Monkey finished 表示Monkey测试执行成功,其他情况均为测试失败。

- 出现crash错误
- 出现anr错误
- 其他异常,Monkey测试没有完成,其他异常中断、关机、重启。
- 获取错误的日志信息
- adb shell monkey -p package > /path/to/monkey_output.txt 2>/path/to/monkey_errors.txt,将标准输出和错误输出分别保存到不同的文件。
- 如何排查错误
- 在日志文件中搜索关键词【"crash"、"anr"和"Exception"、"Error "】来分析定位 crash 、anr的异常问题。
- 找到monkey是在日志中哪个地方出错的,查找monkey执行的是哪一个Activity,可以在Switch关键字后面找,假如两个Swtich之间出现了崩溃或其他异常,可以在两个Switch中间的Activity中查找问题的所在
- 查看monkey里面出错前的一些事件,手动执行这些事件
- 以上步骤还不能找出Activity,则可以使用之前发生错误中使用的种子值,再执行monkey命令,以便复现问题。
- bug描述,bug标题中加Monkey测试及错误的类型crash/anr错误带上这样的字样。
