Monkey是Google提供的一个用于稳定性与压力测试的命令行工具,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试, Monkey测试是一种为了测试软键件的稳定性,健壮性的快速有效的方法。典型的应用(对于外包的app,为了快速检查程序的健壮性所做的验收测试)。由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar。
先来张图看看monkey的压力测试参数
使用的是一个monkey桌面程序,导入包名后,设置伪随机事件流的个数,延迟时间,勾选忽略崩溃,超时,安全异常;设置monkey命令的循环次数,选择测试的包名,开始运行
实例:adb shell monkey -p com.android.deskclock -v-v-v --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions 30000 >d:lmonkeylog.txt (/sdcard/monkeylog.txt)
意思:给时钟应用发送30000个伪随机事件流,每个事件的延迟为500毫秒,且忽略崩溃、超时、安全异常
-p 后面跟包名(需指定多个应用,则 -p package1 -p package2 )
-v-v-v 表详细的日志 (精简:-v 普通:-vv或-v-v 详细:-vvv或者-v-v-v)
--throttle <milliseconds> 用于指定用户操作(即事件)的延迟时间,单位是毫秒
--ignore-crashes 忽略崩溃:当应用程序发生crash之后,继续运行
--ignore-timeouts 忽略超时:当应用程序发生任何超时错误时,Monkey将继续向系统发送事件,直到计数完成。
--ignore-security-exceptions 忽略安全异常:当应用程序发生许可错误时,Monkey将继续发送事件。
-s 伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列,即为复现bug设置上一轮测试的seed值
--randomize-throttle 在事件之间插入随机延迟,需要与–throttle配合使用,随机延迟范围为(0–throttle设置的时间)
--device-sleep-time 设备睡眠时间
--pct-touch <percent> 调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置。
--pct-motion <percent> 调整动作事件的百分比(动作事件由屏幕上某一处的一个down事件、一系列的伪随机事件和一个up事件组成
--pct-trackball <percent> 调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击
--pct-nav <percent> 调整基本导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成
--pct-majornav <percent> 调整主要导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:键盘的中间按键,回退按键,菜单按键等
--pct-syskeys <percent> 调整系统按键事件的百分比(这些按键通常被保留,由系统使用,如Home/Back/音量控制键等
--pct-appswitch <percent> 调整启动activity的百分比。在随机间隔里,monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
--pct-anyevent <percent> 调整其他类型事件的百分比。包括:按键、其他不常用的设备按钮等包含了所有其它类型的事件,如:按键、其它不常用的设备按钮等等
--pct-filp 调整键盘换出隐藏的百分比
--pct-pinchzoom 调整两指缩放压缩手势的百分比
--hprof monkey会在发送时间的前后生成app内存快照文件,一般会在设备的/data/misc目录下生成hprof的文件。(注: /data/misc 需要root权限)
注:
1.要测试多个应用(-p package -p package );-p 测试的是桌面存在图标的应用程序;-c 是桌面不存在图标的应用
2.崩溃:Foce Close 超时:Application Not Responding
3.percent代表了这个事件占到所有随机事件的百分比数,多个参数指定的时候,加起来的百分比数不能多于100%。
4.adb shell monkey --pct-rotation 100 --throttle 2000 10//两秒间隔旋转10次
5.停止Monkey命令(也可以重启设备):adb shell ps |findstr monkey 或者 adb shell 然后 ps |grep monkey 。再进行kill 进程
6.如果有多个可以使用 adb shell top |findstr monkey
7.Monkey除了做伪随机事件外,也能写脚本,例子monkey-example.txt。先push到设备中
运行(adb shell monkey -f /sdcard/monkey-example.txt -v-v-v 3)
8.查看包名.类名可以去查看之前adb命令的文章
注:脚本完成后将.txt文件push到手机中,然后使用命令"adb shell monkey -f path/name.txt --throttle 500 -v -v 1"命令调试运行,其中path指的是文件存放路径,name指的文件名
=============================脚本实例===================================
#头文件、控制monkey发送消息的参数
type=raw events
count=10
speed=1.0
#执行脚本的入口
start data >>
#1.打开浏览器(QQ浏览器为例:包名,包名.类名)
LaunchActivity(com.tencent.mtt.x86,com.tencent.mtt.x86.MainActivity)
ProfileWait()
#2.输入网址(通过点击坐标获取输入框)
Tap(479,155)
ProfileWait()
DispatchString(www.baidu.com)
ProfileWait()
#3.获取焦点
UserWait(2000)
DispatchPress(KEYCODE_ENTER)
#4.点击确定
ProfileWait()
DispatchPress(KEYCODE_ENTER)
#5.完成退出浏览器,返回HOME界面
UserWait(3000)
DispatchPress(KEYCODE_HOME)
ProfileWait()