一、什么是monkey?
Monkey是Android中的一个命令行工具,monkey测试的原理就是利用socket通讯的方式来模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。当Monkey程序在模拟器或设备运行的时候,如果用户触发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件。
Monkey测试目的:测试软件的稳定性、健壮性。
二、monkey的特征
(1)测试的对象仅为应用程序包,有一定的局限性。
(2)Monkey测试使用的事件流数据流是随机的,不能进行自定义。
(3)可对MonkeyTest的对象,事件数量,类型,频率等进行设置。
三、常见问题处理
(1)adb devices检测不到设备怎么办呢?
如果你在命令行输入adb devices检测不到你的设备,可以去查看一下你的adb.exe进程有没有启动,如果这个进程没有启动你的设备肯定是检测不到的。
说明:adb全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod手机。它的主要功能有:
* 运行设备的shell(命令行)
* 管理模拟器或设备的端口映射
* 计算机和设备之间上传/下载文件
* 将本地apk软件安装至模拟器或android设备
如果你的adb.exe进程一直无法启动,可能是端口被其它程序给占用了,你可以自己创建一个adb.exe的端口。
在创建之前你可以在命令行通过netstat查看一下你要设置的这个端口有没有被程序占用“开始”-->“运行”-->输入cmd->在命令行输入netstat -ano |findstr "25025",如果查看没有进程,说明这个端口没有占用。
接下来在电脑->属性->高级系统设备->环境变量->系统变量,新建一个adb.exe的端口值,如图是我自己创建的:
然后启动adb的服务,“开始”-->“运行”-->输入cmd->在命令行输入adb start-server->Enter,如图
然后在命令行输入adb devices看是否检测到你的设备,如图
(2)如果adb shell 进入后显示$符表示一般用户,#符表示拥有管理员权限用户,我们需要切换到有管理员权限的用户( su 用户名)。
(3) 如果在安装APP软件时无法安装,提示如下报错:
Installation error:INSTALL_FAILED_INSUFFICIENT_STORAGE
是由于设备存储空间不足造成,需要进入“Settings>Storage”查看剩余空间大小,如果不够,需要删除多余的软件来释放足够的空间。
四、Monkey基本命令
1).标准的monkey 命令
[adb shell] monkey [options] <eventcount> , 例如:
adb shell monkey -v 500 --------产生500次随机事件。
上面只是一个简单的例子,实际情况中通常会有很多的options 选项
2).四大类—— 常用选项 、 事件选项 、约束选项、调试选项
1:常用选项 (monkey --help)
复制代码 代码如下:
--help:打印帮助信息
--pct-touch {百分比} 如:----pct-touch 10 调整触摸事件的百分比
motion 动作事件 trackball轨迹事件 nav基本导航事件 majornav主要导航事件
-v:指定输出信息的详细级别(0~2),一个 -v增加一个级别 , 默认级别为 0 ,最多3个。
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下 表所示:
Level 0 : adb shell -p com.shjt.map -v 100 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息
Level 1 : adb shell -p com.shjt.map -v -v 100 // 提供较为详细的日志,包括每个发送到Activity的事件信息
Level 2 : adb shell -p com.shjt.map -v -v -v 100 // 最详细的日志,包括了测试中选中/未选中的Activity信息
2:事件选项
-s:指定产生随机事件种子值,相同的种子值产生相同的事件序列。当出现问题时要重现操 作问题需要设置相同的种子值。如:-s 1521701962828 (从日志中的seed值获取)
--throttle:每个事件结束后的间隔时间——降低系统的压力,单位是毫秒(如不指定,系统会尽快的发送事件序列)。如:--throttle 100
3:约束选项
复制代码 代码如下:
-p:指定有效的package程序名称
可以添加多个P,测试多个package, 如:-p com.ckt -p com.ckt.asura;
如果不指定包,Monkey将允许系统启动设备中所有的APP。
4:调试选项
复制代码 代码如下:
--dbg-no-events:初始化启动的activity,但是不产生任何事件。
--ignore-crashes:忽略崩溃
--ignore-timeouts:忽略超时
--ignore-security-exceptions:忽略安全异常(发生证书许可错误时)
--monitor-native-crashes:监视并报告系统中本地代码发生的崩溃
五、Monkey命令举例说明:
adb shell monkey -p com.sankuai.meituan -v 200
但是,工作中为了保证测试数量的完整进行,我们一般不会在发生错误时立刻退出压力测试。monkey 测试命令如下:
adb shell monkey -p com.sankuai.meituan --throttle 300 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 2000 > D:\a.txt
monkey作用的包:-p com.xy.android.junit
事件之间的延迟时间500毫秒:--throttle 500
产生时间序列的种子值:-s (复现问题时需要设置,从运行日志中获取)
忽略程序崩溃 : --ignore-crashes
忽略超时: --ignore-timeouts
监视本地程序崩溃: monitor-native-crashes
输出信息级别为2: -v -v
产生 10000个事件 : 10000
信息保存路径:> D:\a.txt
如果想在执行monkey命令过程中终止测试,执行以下命令即可:
【adb shell】进入后,用【ps | grep monkey】命令查询出monkey进程号(显示的第一个数字),然后用【kill pid 进程号】命令杀掉该进程号即可立即停止测试。
手工结束进程:kill pid 17185
六、Monkey 日志分析:
(1)ANR问题:在日志中搜索“ANR ”(注意ANR后有空格)
(2)崩溃问题:在日志中搜索“Exception”
Application Not Responding 在Android上,如果你的应该程序有一段时间响应不够灵敏,程序无响应。