monkey 是一款通过命令行来对我们 APP 进行测试的工具,可以运行在模拟器里或真机上。它向系统发送伪随机的用户事件流,实现对正应用程序进行压力测试。(其实可以想象成一只猴子啥都不知道,疯狂乱敲......)
伪随机又是个什么鬼?
是因为该随机事件可进行复现(定位可能出现的问题)。我们每次执行一组随机事件,系统都会给一个随机的ID,称之为seed。若我们想将该组随机事件再次执行一遍,则使用-s+seed+count即可。
monkey 测试是 Android 平台自动化测试的一种手段,通过 monkey 程序模拟用户触摸屏幕、滑动 Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久会发生异常。(当然也可以做自动化测试)开发人员结合 monkey 打印的日志 和系统打印的日志,修改测试中出现的问题 。
那什么时候进行压力测试呢?
等产品稳定,没有太多的 bug 的时候,一般会用 monkey 去测试待测应用的稳定性,健壮性(是否会发生闪退,崩溃,无响应)和整机测试
1、确保电脑已安装 adb
直接下载 adb 安装包,把相关文件放到 c:/windows/system32 目录和 c:/windows/system 目录下,完成安装
2、jdk 环境已配好(没配好自己配吧,自己配不好请移驾https://www.baidu.com/s?ie=utf-8&wd=jdk%E7%8E%AF%E5%A2%83%E6%90%AD%E9%85%8D)
此时此刻我要小声 bb 一下为什么要配置 jdk 了,
1) Monkey 程序由 Android 系统自带,使用 Java 语言写成,在 Android 文件系统中的存放路径是:/system/framework/monkey.jar;
2) Monkey.jar 程序是由一个名为 “monkey” 的 Shell 脚本来启动执行,shell 脚本在 Android 文件系统中的存放路径是:/system/bin/monkey;
这样就可以通过在 CMD 窗口中执行:adb shell monkey {+ 命令参数}来进行 Monkey测试了。
3、(安装模拟器/真机)手机已经打开开发者模式以及 USB 调试状态
4、 把手机锁屏设置为从不
1)参数: -p
参数-p 用于约束限制,用此参数指定一个或多个包(Package,即 App)。指定包之后,monkey 将只允许系统启动指定的 APP。如果不指定包,monkey 将允许系统启动设备中的所有 APP。
指定一个包:
adb shell monkey -p com.kaiyuan.developmentbusiness 100
说明:com.kaiyuan.developmentbusiness 为包名,100 是事件计数(即让 monkey 程序模拟 100 次随机用户事件)。
指定多个包:
adb shell monkey -p com.qywlandroid –p com.kaiyuan.developmentbusiness 100
不指定包:
adb shell monkey 100
说明:monkey 随机启动 APP 并发送 100 个随机事件。
2) 参数: -v 日志详细程度
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分 3 个级别,分别对应的参数如下表所示:
日志级别 Level0
adb shellmonkey -p com.kaiyuan.developmentbusiness –v 100
说明缺省值,仅提供启动提示,测试完成和最终结果等少量信息
日志级别 Level 1
adb shellmonkey -p com.kaiyuan.developmentbusiness –v -v 100 说明提供较为详细的日志,包括每个发送到 Activity 的事件信息
日志级别 Level 2
adb shellmonkey -p com.kaiyuan.developmentbusiness –v -v –v 100 说明最详细的日志,包括了测试中选中/未选中的 Activity 信息
3) 参数:-s
用于指定伪随机数生成器的 seed 值,如果 seed 相同,则两次 monkey 测试所产生的事件序列也相同的。
monkey 测试 1:adb shell monkey -p com.kaiyuan.developmentbusiness –s 10 100
monkey 测试 2:adb shell monkey -p com.kaiyuan.developmentbusiness –s 10 100
两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的 Seed 值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;
4) 参数:--throttle <毫秒>
用于指定用户操作(即事件)间的时延,单位是毫秒;
adb shell monkey -p com.qywlandroid –throttle 3000 100
5) 参数: --ignore-crashes
用于指定当应用程序崩溃时(Force& Close 错误),monkey 是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey 依然会发送事件,直到事件计数完成。
adb shellmonkey -p com.qywlandroid --ignore-crashes 1000
测试过程中即使 Weather 程序崩溃,Monkey 依然会继续发送事件直到事件数目达到 1000 为止;
adb shellmonkey -p com.qywlandroid 1000
测试过程中,如果 Weather 程序崩溃,Monkey 将会停止运行。
我这里用的 pycharmIDE,写完之后直接建个 .bat 放里面就好了,比如说
ojbk,请看我的目录
这个时候就该讲一哈我们伟大的插件ChkBugReport
ChkBugRepor t 是一个开源工具,它可以把你得到的 bugreprot.t 解析成适合阅读的 html 文件。导出的 html 文件包含了根据 bugreport.txt 数据得出的图表和分析结论。
首先添加.config 文件,添加内容为
然后创建 runmonkey.py 文件,主要函数为
;