Monkey测试

什么是Monkey测试
Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试
Monkey 测试是为了测试软件的稳定性、健壮性
Monkey 程序需要通过 adb 来运行

Monkey测试操作步骤
安装并配置好 adb 环境,并通过 adb 连接好设备;
获取被测应用的包名;
执行 Monkey 命令进行测试

Monkey支持的事件
Monkey支持11种事件,主要是以下5种…
Touch触摸事件-即点击:由屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作
Trackball滚动球事件-即轨迹:由一个或多个随机的移动事件组成,有时会伴随着点击事件
motion滑动事件:由屏幕上某处一个down事件、一系列随机的移动事件和一个up事件组成
nav基本导航事件:由方向输入设备的上下左右按键所触发的事件组成
majornav主要导航事件:通常会导致UI界面中的动作事件,如5-way键盘的中间键,回退 按键、菜单按键

Monkey测试的特点
Monkey 测试,所有的事件都是随机产生的,不带人的主观性
1、测试的对象仅为应用程序包,有一定的局限性
2、Monky测试使用的事件数据流是随机的,不能进行自定义
3、可对MonkeyTest的对象,事件数量,类型,频率等进行设置

Monkey基本语法
$ adb shell monkey [options]
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件

Monkey命令参数

-p  用此参数指定一个或多个包。指定后只允许系统启动指定的app。不指定包则默认允许系统启动设备中的所有app

指定一个包:adb shell monkey -p <包名> <事件数>
指定多个包:adb shell monkey -p <包名> -p <包名> <事件数>

-v  用亍指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别:

Level 0:缺省值,仅提供启动提示、测试完成和最终结果等少量信息
adb shell monkey -p <包名> -v <事件数>
Level 1:提供较为详细的日志,包括每个发送到Activity的事件信息 app的归定的activity
adb shell monkey -p <包名> -vv <事件数>
Level 2:最详细的日志,包括了测试中选中/未选中的Activity信息  app的所有activity
adb shell monkey -p <包名> -vvv <事件数>

指定事件时间间隔

--throttle <millisenconds>:每个事件结束后的间隔时间,单位是毫秒
adb shell monkey -p 包名 --throttle <millisenconds>

-s(随机数种子):用于指定伪随机数生成器的seed值.每次操作按照一定的先后顺序所组成的一系列操作,即一个序列.每次执行完Monkey之后,从输出里可以看到当前的seed值,只要通过-s参数指定相同的seed,就可以重复刚才的操作。

设置种子数,<seednumber>:用于指定伪随机数生成器的seed(种子)值

adb shell monkey -p <包名> --throttle <millisenconds> -s <seednumber>

设置事件比例

默认情况下,如果不设置,会是--pct-anyevent为百分之百,也就是纯随机事件。如果通过其他的参数配置了之后,如果相加的百分比不为百分百,余下的百分比部分也会生成随机事件(-pct-anyevent 0,表示100%,输入20,表示20%)

--pct-touch <percent>:触摸事件的百分比
--pct-motion <percent>:滑动事件的百分比
--pct-trackball <percent>:轨迹球事件的百分比
--pct-nav <percent>:基本导航事件的百分比(比如输入设备上、下、左、右键)
--pct-majornav <percent>:主要导航事件的百分比(比如中间键、返回键、菜单键)
--pct-syskeys <percent>:系统按键事件的百分比(设定系统导航事件百分比,比如home键、back键、拨号键及音量键)
--pct-appswitch <percent>:activity之间切换的百分比(设定启动Activity事件百分比)
--pct-pinchzoom <percent>:缩放事件的百分比
--pct-rotation <percent>:屏幕旋转事件的百分比
--pct-flip <percent>:键盘事件的百分比
--pct-anyevent <percent>:任意事件(设定不常用事件百分比)

忽略异常

--ignore-crashes:忽略崩溃
--ignore-timeouts:忽略超时(忽略超时,app运行中如果超时可能会报错ANR)
--ignore-security-exceptions:忽略安全异常(该参数用于软件出现错误时,例如证书错误,网络错误等。Monkey是否继续运行直到计数完成)

--kill-process-after-error:发生错误后直接杀掉进程

--dbg-no-events:初始化启动的activity,但是不产生任何事件

--hprof:指定该项后再事件序列发送前后回立即生成分析报告

--monitor-native-crashes:跟踪本地方法的崩溃问题

--wait-dbg:直到链接了调试器才执行monkey测试

-bugreport:当ANR,系统无响应,Crash的时候获得bugreport

保存日志

方式一:adb shell monkey 1000> 文件路径/文件名
方式二:adb logcat -v time '*E' > monkey.log

实战

对抖爸爸直播app进行自动遍历测试
1、确定测试app的包名:com.dbbjt.phonelive
2、执行8小时,每300毫秒发送一个事件,则事件数=8*60*60*1000/300=96000
3、日志级别:-v-v-v
4、确定雪球中常用的操作类型和比例点击(点击70%,滑动10%,系统按键10%,其它10%)
5、确定seed值:1234567
6、确定调试选项:忽略闪退、忽略超时、忽略安全异常
7、重定向到文件中>monkey.log

adb shell monkey -p com.dbbjt.phonelive  -vvv --pct-touch 70 --pct-motion 10 --pct-syskeys 10  -s 1234567 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --throttle 300 96000 >monkey.log

日志分析

跑完monkey 之后,需要去确认有没有出现 bug? 最直观简单的方式就是通过搜索以下关键字:
.如果出现空指针 NullPointerException就一定是 bug

1、闪退问题:在日志中搜索"crash"
2、异常问题:在日志中搜索"Exception",常见的Java异常:
    算术异常类:ArithmeticExecption
    空指针异常类:NullPointerException
    类型强制转换异常:ClassCastException
    数组负下标异常:NegativeArrayException
    数组下标越界异常:ArrayIndexOutOfBoundsException
    违背安全原则异常:SecturityException
    文件已结束异常:EOFException
    文件未找到异常:FileNotFoundException
    字符串转换为数字异常:NumberFormatException
    操作数据库异常:SQLException
    输入输出异常:IOException
    违法访问错误:IllegalAccessError
    内存不足错误:OutOfMemoryError
    堆栈溢出错误:StackOverflowError
3、强制退出:在日志中搜索"force closed"
4、ANR(application no response)程序无响应:在日志中搜索"ANR"

monkey测试停止的条件

1、指令执行完成

2、遇到崩溃,或者异常

3、杀掉进程

monkey启动后需要杀掉进程

第一步,找到进程号: ps | grep monkey

第二步,杀进程: kill -9 进程号

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值