在Monkey测试前,必须进行以下准备:
- 手机屏幕超时设置为30分钟,防止手机进入锁屏状态。
- 如果log文件想放电脑上,需要直接使用adb shell monkey -p ....无需插存储卡。
- 如果log文件想放手机内,需要先进入adb shell,然后运行 monkey -p ...则插入SIM卡和存储卡后将手机开机,开启ADB模式,连接到PC(存储卡剩余空间尽量留大,建议1G以上)
- 开启系统log。(具体可依据每个机型平台决定)
- 调出终端,在弹出的命令窗口中,输入adb devices,检查设备是否连接
- 在弹出的命令窗口中,输入adb shell,进入
- 输入 Monkey命令。如下:
(压力测试指令:monkey -p 包名 [参数] -v (-v -v) 执行次数 >导出log文件)
PC端:
monkey -p com.quanleimu.activity -v --throttle 300 --pct-touch 30 --pct-motion 20 --pct-nav 20 --pct-majornav 15 --pct-appswitch 5 --pct-anyevent 5 --pct-trackball 0 --pct-syskeys 0 -p ‘%s’ 1000 2>/Users/xyz/monkeylog.txt
(mac端可以是c:\monkeylog.txt)
上面可能日志无法写入。下面这个可以写入
adb shell monkey -p com.quanleimu.activity --throttle 300 --pct-touch 30 --pct-motion 20 --pct-nav 20 --pct-majornav 15 -vvv 1000 >/Users/XYZ/monkeylog.txt
手机端:
后缀是 /sdcard/error.txt 1>/sdcard/info.txt
结果检查与分析:
测试结束后,PC端的直接打开monkeylog.txt,分析
需要将手机连接PC,拷贝以下文件:
- info.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时发送的各种事件,如触摸事件的位置等等。
- error.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时产生的一些ANR、强制关闭等异常。
- LOG文件:此文件在手机上的LOG文件夹中中,主要主要记录程序对MONKEY测试时的响应情况。
- 我们需要对这3个文件进行分析整理,以便提交开发人员处理。
$ adb shell monkey -p package_name -v 1000 > F:\monkeylog.cat
-p 后面的package_name为你安装在手机或模拟器上的要进行Monkey测试的APP包名
-v 表示模拟多少次事件进行测试
<noscript>后面的路径为将此次测试的log输出到哪个位置
</noscript>
0:触摸事件百分比,即参数–pct-touch
1:滑动事件百分比,即参数–pct-motion
2:缩放事件百分比,即参数–pct-pinchzoom
3:轨迹球事件百分比,即参数–pct-trackball
4:屏幕旋转事件百分比,即参数–pct-rotation
5:基本导航事件百分比,即参数–pct-nav
6:主要导航事件百分比,即参数–pct-majornav
7:系统事件百分比,即参数–pct-syskeys
8:Activity启动事件百分比,即参数–pct-appswitch
9:键盘翻转事件百分比,即参数–pct-flip
10:其他事件百分比,即参数–pct-anyevent
分析测试报告
分析测试报告时,需要注意以下内容。
(1)注意报告中的seed值:我们刚才执行monkey时,没有指定seed,在报告一开始,可以看到其自动生成的seed值,见下图红色部分。如果seed相同,则两次Monkey测试所产生的事件序列也相同。
<noscript></noscript>
示例:
Monkey 测试1:adb shell monkey -p com.airbnb.lottie –s 10 -v 100
Monkey 测试2:adb shell monkey -p com.airbnb.lottie –s 10 -v 100
两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的。
(2)注意查找日志中的无响应问题和崩溃问题。无响应问题可以在日志中搜索 “ANR” ,崩溃问题搜索 “CRASH” ,内存泄露问题搜索"GC"(需进一步分析),异常问题搜索 “Exception”(如果出现空指针, NullPointerException,需格外重视)。
例如:
<noscript></noscript>
(3)为了进一步分析问题的来源,可以找到Log中出现问题处的前一次Switch,随后根据Log主要是查看相关的Activity。
例如下面的Log执行的就是MainActivity。
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.airbnb.lottie/.samples.MainActivity;end