执行命令
adb uninstall com.xxx
adb install D:\apk\xxxx.apk
start "C:\Windows\System32\cmd.exe" echo %date% %time:~0,8%
adb shell monkey -p com.xxx --throttle 1000 --pct-touch 25 --pct-motion 20 --pct-pinchzoom 5 --pct-trackball 5 --pct-rotation 5 --pct-nav 10 --pct-majornav 10 --pct-syskeys 10 --pct-appswitch 10 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 10000 >D:\apk\monkeyLog.txt
start "C:\Windows\System32\cmd.exe" echo %date% %time:~0,8%
常用属性
进入模拟器 adb -e shell,如 adb -e shell monkey -p com.topevery.ldt 1000 --ignore-crashes --ignore-timeouts (模拟器容易crash)
进入手机 adb -d shell,如 adb -d shell monkey -p com.topevery.ldt 1000 --ignore-crashes --ignore-timeouts
不指定包:adb shell monkey 1000
指定包:adb shell monkey -p com.topevery.ldt 1000
设置指令之间的时间间隔:adb shell monkey -p com.topevery.ldt --throttle 1000 1000 (1000毫秒,即1秒)
(bug复现方法)重复上次随机操作参数 seed参数:adb shell monkey -p com.topevery.ldt -s xxxx --throttle 1000 1000
触摸事件参数百分比设定:adb shell monkey -p com.topevery.ldt --pct-touch 50 1000
(0):触摸事件百分比,即参数--pct-touch ---> 即在某一位置的Down-Up(手指的放下和抬起)。
(1):手势事件百分比,即参数--pct-motion ---> 以Down开始,Up结尾的move动作事件。
(2):缩放事件百分比,即参数--pct-pinchzoom --->
(3):轨迹球事件百分比,即参数--pct-trackball ---> 即单纯的Move。
(4):屏幕旋转事件百分比,即参数--pct-rotation --->
(5):基本导航事件百分比,即参数--pct-nav ---> 即来自于方向输入设备的上下左右操作。
(6):主要导航事件百分比,即参数--pct-majornav ---> 即Navigation Bar的确认,菜单,返回键等。
(7):系统事件百分比,即参数--pct-syskeys ---> 即系统保留按键,如HOME键,BACK键,拨号键,挂断键,音量键等。
(8):activity启动事件百分比,即参数--pct-appswitch ---> 应用activity启动事件。
(9):键盘翻转事件百分比,即参数--pct-flip --->
(10):其他事件百分比,即参数--pct-anyevent ---> 其他未提及事件,可能包含上述其他时间。
忽略崩溃 忽略ANR(Application Not Responding) adb shell monkey -p com.topevery.ldt --ignore-crashes --ignore-timeouts 1000
--ignore-crashes 忽略程序崩溃。设置此选项后,Monkey会执行完所有的事件,不会因crash而停止。
--ignore-timeouts 忽略程序无响应。设置此选项后,Monkey会执行完所有的事件,不会因ANR而停止。
--ignore-security-exceptions 忽略证书或认证异常。设置此选项后,Monkey会执行完所有的事件,不会因认证或证书异常而停止。
--ignore-native-crashes 监视系统中本地代码发生的崩溃
--monitor-native-crashes 忽略本地代码导致的崩溃。设置忽略后,Monkey将执行完所有的事件,不会因此停止。
-v -v –v 提供最详细的设置信息,用于指定反馈信息级别,总共分为level 0、level 1、level 2三个级别,级别越高,输出的日志越详细。其他选项可以百度。(>表示文件覆盖打印;>>表示文件尾部打印)
结果分析
1**Monkey测试出crash的bug等级永远为1,版本发布前,Monkey跑出的结果中crash要为0。
业内标准:最终发布版本前,Monkey跑完的总次数不少于25W次,其结果里不允许有nullPointException出现。**
0)测试成功的情况:搜索关键字“Monkey finished”
1)ANR(Application Not Response):程序无响应,一般主线程超过5秒没处理就会出现ANR错误。通过搜索ANR关键词来定位关键的事件信息。adb shell 进入手机-->cd /data/anr/ ---->ls ---->more traces.txt 就可以查看了,里面记录了所有应用的anr信息
一般是主线程的响应超过5秒,或者BroadcastReceiver没有在10秒内作出响应。这个就是一个比较严重的缺陷。把耗时的操作另起线程来处理就可以了。
2)ForceClosed或其他异常退出信息:通过搜索Fatal关键词来定位。内存泄露问题搜索"GC"(需进一步分析)
3)崩溃问题:通过搜索Exception关键词来定位。(如果出现空指针, NullPointerException,需格外重视)
4)发生异常后,通过搜索Crash关键词来定位到详细的堆栈信息。
5)内存溢出的情况:搜索关键字“OOM”
6) 其他异常
A、Restart System异常(系统重新启动),即log信息的最后几行会看到Restart System的打印信息,说明手机被自动的重启或断掉,有几个方面的原因
//运行过程中,存在异常手机被自动重启
//手机在运行过程中,进入设置中的恢复出厂设置,导致手机重启
B、RuntimeException等异常,同样的会在plog.log中可以看到相应的打印信息, java.lang.RuntimeException该问题多出现在操作无响应之后,或者是某应用的服务无法启动或连接时,需要具体问题具体的分析
C、StaleDataException、readException等异常, 在plog.log中可以看到相应的打印信息,也会有相应的信息: android.database.StaleDataException,该信息说明android的数据库操作出现异常, 需要具体问题具体的分析
D、IllegalArgumentException等异常,多少情况下为说明向函数传递了一个不正确或不合法的参数需要具体问题具体的分析
7)monkey执行后,异常终端,手机黑屏,且日志提示Injection Failed
处理:换个手机,使用该seed看是否复现