使用monkey工具进行稳定性测试、压力测试
monkey
是
android
自带系统自带的程序,可以生成伪随机用户事件来模拟单击、双击、输入、滑动、
拖动、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试和稳定性测试。
1.1伪随机事件类型
伪随机事件类型一共有
11
种,具体如下:
触摸(
Touch
)、手势
(motion)
、二指缩放(
pinchzoom
)、轨迹
(trackball)
、旋转
(rotation)
、基本导
航
(nav)
、主要导航事件
(majornav)
、系统按键
(syskeys)
、启动
activity
(
appswitch
)、键盘事件
(flflip)
和其它类型事件
(anyevent)
,在日志中分别用
0-10
来表示。测试可以通过
—pct-
事件类型
指定事件的
比例。
指定多个事件的百分比
adb shell monkey -p cn.mopon.fifilm --pct-touch 20 --pct-pinchzoom 30 --pct
motion 15 --pct-appswitch 30 1000
说明:指定多个事件百分比时,各百分比之和不能超过
100%
。如果指定了事件类型百分比,这些指定
事件百分比加起来等于
100
,则只生成指定事件。如果加起来小于
100
,假设加起来等于
80
,则没有指
定的事件会随机生成,且各未指定事件百分比数加起来等于
20.
如果指定事件百分比加起来大于
100
,则
执行报错。
事件说明:
触摸事件:指在屏幕某处按下并抬起的操作
手势事件:指在屏幕某处的按下、随机移动、抬起的操作(划动)
缩放事件:指在屏幕上某处放大缩小事件,如地图的测试,这类事件较多
轨迹事件:模拟的轨迹球的操作,早期手机较多,现在的手机几乎都没有轨迹球,但轨迹球事件中
包含曲线滑动操作,如果被测程序需要曲线滑动时可以选用此参数
屏幕旋转事件:屏幕旋转事件是一个隐藏事件,它是模拟屏幕的横屏和竖屏转换
基本导航事件:指点击方向输入设备的上、下、左、右按键的操作,现在手机多数没有上下左右的
操作,这类事件很少
主要导航事件:指点击
“
主要导航
”
按键的操作,这些按键通常会导致
UI
界面中的动作,如键盘回
退,菜单,中间键等,现在手机上多数没有这些键。
系统按键事件:指点击系统保留使用的按键的操作,如点击
Home
键、返回键、音量调节键等
启动
Activity
事件:指在手机上启动一个
Activity
的操作,即打开某个应用的某个
activity
界面
键盘事件:键盘事件主要是一些与键盘相关的操作,如点击输入框、键盘弹起、键盘收回等
其它类型事件:除以上事件以外的其它事件,比如按键、其他不常用的设备上的按钮等
1.2monkey命令介绍
monkey
命令格式:
adb shell monkey [options]
;其中
options
值有很多选项,可以在
Monkey
官网
查
看,也可以输入命令
adb shell monkey -help
可以查看到其对应的所有值。
event-count
代表事件总
数,该参数必须写到命令的最后边,且不可以省略。
基础选项:
-p
用于约束限制,用此参数指定一个包,指定包后
Monkey
将被允许启动指定应用。
-v
指定日志的详细程度,分
Level1
、
Level2
、
Level3
;
-v
默认值,仅提供启动提示,操作结果等少量信
息 ,也就是
Level1
,比如
adb shell monkey -p xxx.xxx.xxx -v 1
;
-v -v
提供比较详细信息,比如启动
的每个
activity
信息 ,也就是
Level2
,比如
adb shell monkey -p xxx.xxx.xxx -v -v 1
;
-v -v -v
提供最详
细的信息 ,比如
adb shell monkey -p xxx.xxx.xxx -v -v -v 1
-s
伪随机数生成器的种子值,如果我们两次
monkey
测试事件使用相同的种子值,会产生相同的事件序
列;如果不指定种子值,系统会产生一个随机值。种子值对我们复现
bug
很重要。
--throttle
指定两次操作间的时延,单位为
ms
--pct
事件选项,一般格式为:
--pct-
事件名称
事件百分比
调试选项:
由于
monkey
在测试
app
时,我们需要作长时间的稳定性测试,在测试过程中,
app
很可能因为碰到
问题而崩溃,此时测试会停止,而达不到我们长期测试的目的,我们需要通过调试参数来让测试执行继
续,主要的几个参数如下
--ignore-crashes
指即使应用程序崩溃
(Force& Close
错误
)
,
Monkey
依然会发送事件,直到事件计数
达到指定的次数为止。
例:
adb shell monkey -p cn.mopon.fifilm --ignore-crashes 100000
--ignore-timeouts
指
app
在发生
ANR
错误(无响应),
Monkey
依然会发送事件,直到事件计数完
成。
--ignore-security-exceptions
指
APP
发生许可证书错误时,
Monkey
依然继续发送事件,直到事件数
目达到目标值为止。
1.3monkey测试的项目步骤
以下是
app monkey
测试的详细步骤
1
)先进入
cmd
界面,输入
adb devices
,查看是否正常连接。
2
)输入
adb shell pm list package -3
,查看
app
包名。
3
)输入
adb shell monkey -p +app
包名
-v 10000 >F:\monkey.log
4
)查看日志,分析问题。如果出现问题,可以重复运行
monkey
命令,但是要保证有相同的
seed
值。
如果问题复现,就让开发进一步定位问题原因。
1.4monkey日志分析
当
monkey
测试时出现问题,此时我们需要分析定位问题,我们需要分析
monkey
日志,主要查看日志
中的:
无响应问题:在日志中搜索
“ANR”
崩溃问题:在日志中搜索
“crash”
异常问题:在日志中搜索
“ Exception”
其他问题:在日志中搜搜
“ Error
、
Null
(空指针异常)
”
等
Monkey
测试出现错误后,重现问题步骤为以下几步:
(1)
找到是
monkey
里面的哪个地方出错
(2)
查看
Monkey
里面出错前的一些事件动作,并手动执行该动作
(3)
若以上步骤还不能找出,可以使用之前执行的
monkey
命令再执行一遍,注意
seed
值要一样
1.5 事件次数计算方法
假设我们需要测试
APP
持续运行
12
个小时,应该设置生成多少个事件呢?
1.
首先设置
1000
个事件执行一下
monkey
命令,查看日志,假设用时
100
秒。
2.
持续运行
12
小时,也就是
12*3600=43200
秒
3.
接着
43200
除以
100
等于
432
4.
最后用
432
乘以
1000
等于
432000
,则大致需要设置
432000
个事件