monkey是Android系统自带的一款稳定性测试命令行工具,可运行在模拟器或实际设备中,它向系统发送伪随机的用户事件,模拟用户的按键输入,手势输入等操作,从而对正在运行的应用程序进行压力测试,目的是看设备多长时间会出现异常,并观察系统的稳定性和容错能力
monkey的启动脚本位于Android系统的/system/bin目录的monkey文件,jar包位于Android系统的/system/framework目录的Monkey.jar文件,用户主要通过adb命令启动monkey,monkey在运行时,会根据命令行参数的设置,生成伪随机的事件流,并在Android设备中执行相应的测试事件,并对测试系统进行监测
monkey环境的搭建:
monkey是由adb命令启动的,故只要配置adb环境即可,步骤:
1. 下载安装Android sdk 和JDK
2. 将Android sdk目录下的platform-tools和tools目录配置到环境变量path中(可以运行adb 命令)
monkey启动的脚本为:
直接PC启动:adb shell monkey[options] <count>
或shell端启动:>adb shell
>monkey [options]<count>
区别在于通过PC端启动运行日志可以保存在PC中,通过shell启动日志可以保存在手机里
options表示monkey执行的可配置参数,是可选项,(如果不指定options,monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包),count表示monkey执行的事件数,是必选项
options可简单的分为五类:
基本配置类参数
事件类型和频率参数
约束限制类参数
调试类参数
官方隐藏类参数
基本配置类参数
--help 输出monkey的命令行使用方法
-v 表示反馈信息的级别,每增加一个-v参数,日志的反馈信息级别增加一个level,level 0(缺省值)除启动提示,测试完成和最终结果wait,提供较少信息
2.事件类型和频率参数
作用:对随机事件进行调控,从而使其遵照设定运行,频率参数的设置限制事件执行的间隔
-s<seed> 伪随机数生成器的种子值,如果以相同的种子数再次运行monkey,他将生成相同的事件序列
--throttle<毫秒数> 在事件之间插入固定延迟
--pct-touch<百分比> 调整触摸事件的百分比(由一个down-up事件组成)
--pct-motion<百分比>动作事件的百分比(一个down,一系列伪随机事件,和一个up事件)
--pct-pinchzoom<百分比>调整二指缩放的半分比(放大缩小动作)
--pct-trackball<百分比>调整轨迹事件的百分比(由一个或几个随机的移动组成,有时还伴随点击)
--pct-rotation<百分比>调整屏幕旋转的百分比
--pct-nav<百分比>调整基本导航事件的百分比(导航事件由来自方向输入设备的up,down,lrft,right组成)
--pct-majornav<百分比>调整主要导航事件的百分比(这些事件通常引发图形界面中的动作,如5-way键盘的中间按键,回退按键,菜单按键)
--pct-syskeys<百分比>调整系统按键的百分比(这些按键通常被保留,由系统使用,如HOME,back,start call,end call及音量控制键)
--pct-appswitch<百分比>调整启动Activity的百分比(在随机间隔里,monkey通过调用startActivity方法最大限度的开启该package下的全部Activity的一种方法)
--pct-flip<百分比>调整键盘事件的百分比(键盘事件如点击输入框,键盘弹起,点击输入框以外区域,键盘收回等)
--pct-anyevent<百分比>调整其他类型事件的百分比
3.约束限制类参数
monkey的约束限制类参数作用是将随机事件运行的范围一个或多个包或类中
-p<包名>限定monkey运行在指定的包中,一个-p参数只能指定一个包
-c<类型名>限定monkey运行在指定的类别(category),多个类别需要多个-c参数指定
4.调试类参数
通过调试类参数,可以对monkey进行一些简单的调试,可以快速定位monkey执行过过程中的问题,
--dbg-no-events 设置此选项,monkey将执行初始启动,进入一个测试Activity,不会再进一步生成事件,为了得到最佳效果,把他与-v,一个或几个包约束,以及保持monkey运行较长事件,从而提供一个可以监视应用程序所调用的包之间的转换的环境
--hprof 设置次选项,将在monkey事件执行之前和之后生成内存快照文件存放在手机的data/misc目录。通过对比快照文件,可以协助定位内存泄漏问题
--ignore-crashes 设置此选项,当应用程序崩溃或发生任何失控异常时,会继续想系统发送事件,直到计数完成
--ignore-timeouts 设置此选项,当应用程序发生任何超时错误(如Application Not Responding)将继续向系统发送事件,直到计数完成
--ignore-security-exceptions 发生应用程序发生许可错误时(如启动一个需要某些许可的activity)继续运行
--kill-process-after-error 当monkey发生错误而停止时,错误的应用程序继续处于运行状态,设置此选项,将会通知系统停止发生错误的进程
--montior-native-crashes监控并报告Android系统中本地代码的崩溃事件
--wait-dbg停止执行中的monkey 直到有调试器和他相连接
5.官方隐藏类参数
--pkg-blacklist-file 限制monkey不测试指定黑名单文档中记录的包,一个参数对应一个包名
--pkg-whitelist-file限制执行白名单中记录的包
-f<脚本文件> 指定monkey执行用户自定义的脚本文件
monkey测试方法
1.monkey常规稳定性测试
例:
adb shell monkey –p com.xx.xx –pct-touch40 –pct-motion 25 –pct-appswitch 10 –pct-rotation 5 –s 12358 –throttle 500 –ignore-crashes–ignore-timeouts –v 500000
内容不解释
1. 自定义脚本的稳定性测试(monkey脚本只能通过坐标的方式定位点击移动的位置)
如需让monkey执行特定的场景,需要用到自定义脚本,然后将编写的脚本通过命令导入到手机中,然后通过命令参数调用脚本即可
脚本函数如下:
LaunchActivity(package_name,Activity名)启动被测应用的某个activity
Tap(x,y,Duration)模拟一次手指单击事件,参数为坐标和点击的时长(ms)
DispatchPress(KeyName)模拟按键点击,参数为按键名字
RotateScreen(rotationDegree,peresist)一个参数用0-3表示顺时针旋转的四个方向,第二个参数表示是否存留
DispatchFlip(TRUE/false)打开或关闭软键盘
LongPress()长按两秒
PressAndHold(x,y,pressDuration)模拟长按事件
DispatchString(input)输入字符串
Drag(x,y,x,y,stepCount)模拟拖动操作,最后参数为移动速度
pinchZoom(x,y,x,y,x,y,x,y,stepcount)模拟缩放手势,第一第二代表第一个手指起止点,第三四为第二手指起止点
UserWait(ms)设置等待时间,毫秒
DeviceWakeUp()唤醒屏幕
脚本的形式如下(后缀名为script):
#头文件,控制monkey发送消息的参数,固定写即可
#脚本类型,一般不用更改
type=raw events
#脚本执行次数,但是由于monkey命令本身可以指定,所以这里设置无效
count=10
命令执行速率,这里也不生效,命令中可以设置
speed=1.0
#以下是monkey脚本
start data>>
LaunchActivity(包名,Activity名)
dispatchPress(KEYCoDe_NAME)
…
如需运行可将脚本导入到手机中,然后通过命令运行
adb pushmonkey.script /sdcard/
adb shell monkey –f/sdcard/monkey.script –v 10
monkey测试中经常用到的小知识点
1. monkey一旦运行,即使断开与pc连接,依然运行,直到结束
停止的方法杀死手机上monkey的进程,查看进程:
adb shell ps |grep monkey
adb shell kill pid
2. 查看应用包名的方法:
(1)通过pm命令查看
在命令行输入 adb shell pm list package查看应用的包名
(2)通过源码查看(AndroidManiFest。xml文件)
(3)通过aapt命令查看
(4)通过adb logcat抓取当前Android机运行的包名
adb shell logcat >D:log.txt(命令行打印日志保存到D盘的log.txt中,打开测试的app后,Ctrl+c停止打印,在log.txt中通过start proc查找应用包名)
3. 辅助命令,获取更多信息
获取内存信息
adb shell dumpsys memifo<进程名>
获取CPU消耗信息
adb shell top –n 1|find”进程名”
获取电量信息
adb shell dumpsys battery
获取GPU信息
adb shell dumpsys gfxinfo<进程名>
获取流量信息
adb shell cat/proc/uid_stat/<被测应用的UID>/tcp_rcv
4. monkey日志的保存方法
保存在pc中
adb shell monkey [option]<count> >d:monkey.txt
保存在手机中
>adb shell
>monkey [option] <count>>/mnt/sdcard/monkey.txt
标注流和错误流分开保存
monkey[option] <count>1>/sdcard/monkey.txt 2> /sdcard/error.txt
monkey日志内容解析
monkey日志一般包含四类信息,分别是测试命令信息,伪随机事件流信息,异常信息,monkey执行结果信息
1. 测试命令信息
monkey启动后会输出当前执行命令的各种参数信息,其中包括种子信息,事件数量。可运行应用列表以及各事件的百分比
2. 伪随机事件流信息
执行的各种事件流信息,例如启动app事件,点击,移动,延时
3. 异常信息
如果遇到错误,会输出对应异常信息
4. monkey执行结果信息
包括执行的事件数量,旋转角度,丢失的事件数量,网络状态等