一、monkey的概念
Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击、滑动、Application切换、横竖屏、应用关闭)实现对正在开发的应用程序进行压力测试。monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法,只针对Activity做测试,不能对Service做测试。
二、monkey的使用
monkey:
adb shell monkey -h
adb shell monkey -p com.lilysgame.calculatorjw 100
-v:用于调控monkey运行日志的等级
-v:显示开始、事件、结束结果几个数据
-v -v:提供较为详细的测试信息,如逐个发送到Activity的 事件
-v -v -v:最详细的日志信息
adb shell monkey -p com.lilysgame.calculatorjw -v 100
指定了相同的种子数,那么这两次monkey运行所发送的事件类型和顺序就是一样的。
常见面试题:做了一次monkey测试,出现一个bug,怎么复现?
指定和上一次相同的种子数,再运行一遍
-s 任意的数字或者字母
adb shell monkey -p com.lilysgame.calculatorjw -v -s 种子数 100 adb shell monkey -p com.lilysgame.calculatorjw -v -s 20220309 100 adb shell monkey -p com.lilysgame.calculatorjw -v -s 20220309 100
调整发送事件的频率
–throttle 毫秒数
adb shell monkey -p com.lilysgame.calculatorjw -v -s 20220309 --throttle 2000 100
触摸事件不单单是按键,它泛指发生在某一位置的一个down-up事件。
–pct-touch 整数,其实就是该事件的比例,要求整数不能超过100
#调整触摸事件百分比为100%
adb shell monkey -p com.tencent.mobileqq -v -v --pct-touch 100 200
触摸事件不单单是按键,它泛指发生在某一位置的一个down-up事件。
–pct-motion 整数,其实就是该事件的比例,要求整数不能超过100
#调整触摸事件百分比为100%
adb shell monkey -p com.tencent.mobileqq -v -v --pct-motion 100 200
–pct-rotation 整数,其实就是该事件的比例,要求整数不能超过100
#调整触摸事件百分比为100%
adb shell monkey -p com.tencent.mobileqq -v -v --pct-rotation 100 200
调整app中的activity的切换比例。
–pct-appswitch 整数,其实就是该事件的比例,要求整数不能超过100
#调整触摸事件百分比为100%
adb shell monkey -p com.tencent.mobileqq -v -v --pct-appswitch 100 200
通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
adb shell monkey -p com.tencent.mobileqq –-ignore-crashes -v 1000
通常,应用程序发生任何超时错误(如“Application Not responding”对话框)Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
adb shell monkey -p com.tencent.mobileqq –-ignore-timeouts -v 1000
命令中用到了–pct-touch和–pct-motion
–pct-touch 70: ‘点击’事件占所有事件的70%
–pct-motion 30: ‘滑动’事件占所有事件的30%
//两个加起来是100,代表不会进行其他事件操作,如轨迹事件,导航事件等等,指定这两种操作后,就极大的降低了monkey点到被测app外面的概率(触发到音量键等系统按键)
-p 指定要进行monkey测试的包,如果不使用参数,则会随机选择一个应用进行测试,也可以选中多个测试包一起运行
-c 指定activity的category类别,可以有多个
–throttle 设置每个事件结束后延迟多少时间再继续下一个事件,降低cpu压力;如果不设置,事件与事件之间将不会延迟,事件将会尽快生成;一般设置300ms,因为人最快300ms左右一个动作
-v 指定日志级别 -v level1 -v -v level2 -v -v -v level3,level3会输出最详细的日志信息
-s 伪随机的事件seed值,可以通过-s参数复现问题,不指定就会随机生成,日志中第一行会有
–ignore-crashes 忽略异常崩溃
–ignore-timeouts 忽略ANR(忽略应用无响应错误)
–ignore-security-exceptions 忽略一些许可错误,比如证书许可,网络许可
–monitor-native-crashes 监视并报告native(原生程序)层发送的崩溃错误
–ignore-native-crashes 忽略native(原生程序)层代码的崩溃错误
–kill-procress-after-error 用于在发送错误后杀死进程
–hprof 设置后,在Monkey事件序列之前和之后立即生产分析报告,保存于data/mic目录,不过将会生成大量几兆文件,谨慎使用
–pct-touch 设置触摸事件的百分比,即手指对屏幕进行点击抬起的动作
例如‘–pct-touch 30%’
–pct-motion 设置移动(滑动)事件百分比,即点击屏幕,然后直线运动,最后抬起这种运动。
–pct-trackball 设置轨迹球事件百分比,这种事件类型是一个或者多个随机移动,包含点击事件,这里可以是曲线运动,不过现在手机很多不支持,这个参数不常用
–pct-syskeys 设置系统物理按键事件百分比,比如home键,音量键,返回键,拨打电话键,挂电话键等
–pct-nav 设置基本的导航按键事件百分比,比如输入设备上的上下左右四个方向键,不常用
–ptc-majornav 设置主导航事件的百分比
–pct-appswitch 设置monkey使用startActivity进行activity跳转事件的百分比,保证界面的覆盖情况
–pct-flip 键盘(手机键盘)事件主要是一些与键盘相关的操作的百分比。比如点击输入框、键盘弹起、点击输入框以外区域、键盘收回等,这里主要是键盘的打开和关闭操作
–ptc-anyevent 设置其它事件百分比
–pct-pinchzoom 调整缩放事件的百分比
0:–pct-touch//touch events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件)
1:–pct-motion//motion events
percentage手势事件百分比(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯
2:–pct-pinchzoom//pinch zoom events percentage二指缩放百分比,即智能机上的放大缩小手势操作
3:–pct-trackball//trackball events
percentage轨迹球事件百分比(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样)
4:–pct-rotation//screen rotation events percentage屏幕旋转百分比,横屏竖屏
5:–pct-nav//nav events
percentage”基本”导航事件百分比(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有
6:–pct-majornav//major nav events
percentage”主要”导航事件百分比(这些导航事件通常会引发UI的事件,例如5-way pad的中间键、回退键、菜单键)
7:–pct-syskeys//system(key) operations
percentage”系统”按钮事件百分比(这些按钮一般专供系统使用,如Home, Back, Start Call, End,Call,音量控制)
8:–pct-appswitch//app switch events
percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
9:–pct-flip//keyboard flip
percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
10:–pct-anyevent//anyevents
percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。
Events injected: 50
//执行事务次数:50次
Sending rotation degree=0, persist=false
//对屏幕旋转事件的旋转度数=0,没有执行旋转事务
Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
//丢弃的数据包:键=0,指针=0,轨迹球=0,键盘点击=0,屏幕翻转=0
#Network stats: elapsed time=71424ms (0ms mobile, 0ms wifi, 71424ms not connected)
//网络统计信息:运行时间=71424ms(手机 0ms,wifi 0ms,未连接 71424ms)
// Monkey finished //monkey 测试结束