monkey是什么?
monkey是android系统自带的一个命令行工具,可以向被测应用程序发送伪随机的用户事件流(如按键、触屏、滑动等操作),实现对应用程序进行测试的目的。
monkey测试也叫猴子测试,是指测试时可以像好奇的猴子一样,不停的对应用程序进行随机操作,以便验证应用程序的稳定性和健壮性。因此,monkey测试是软件稳定性、健壮性的测试工具
参数
Monkey参数的约束限制规范
1.一个 -p 选项只能用于一个包,指定多个包,需要使用多个 -p 选项;
2.-s 伪随机数生成器的seed值,如果用相同的seed值再次运行monkey,它将生成相同的事件序列,对9个事件分配相同的百分比;
3.-c 用此参数指定一个或多个类别,同样,需要指定多个类别就需要多个-c参数;常见的类别有Intent.category.LAUNCHER、Intent.category.MONKEY;
4.-v 命令行的每一个-v将增加反馈信息的级别:
Level 0为一个-v的命令,除了启动的提示、测试完成和最终结果之外,提供较少的信息 ; Level 1为两个-v的命令,提供较为详细的测试信息,如逐个发送到Activity的事件 ; Level 2为三个-v的命令,提供更加详细的测试信息,如测试中被选中或未被选中的Activity;
5.--throttle 设定在两个事件之间插入一个固定延时
常见命令组合:
1.monkey -p com.package -v 500 :简单的输出测试的信息;
2.monkey -p com.package -v -v -v 500 :以深度为三级输出测试信息;
3.monkey -p com.package --port 端口号 -v :为测试分配一个专用的端口号,不过这个命令只能输出跳转的信息及有错误时输出信息;
4.monkey -p com.package -s 数字 -v 500 :为随机数的事件序列定一个值,若出现问题下次可以重复同样的系列进行排错;
5.monkey -p com.package -v --throttle 3000 500
:为每一次执行一次有效的事件后休眠3000毫秒;
Monkey工具九个事件
//Monkey工具随机事件类型(seed值)
[--pct-touch PERCENT]
-0. 触摸事件(down-up事件);
[--pct-motion PERCENT]
-1.动作事件(down-up事件和伪随机事件组成);
[--pct-trackball PERCENT]
-2.轨迹事件(随机移动、有时伴随点击);
[--pct-nav PERCENT]
-3.基本导航事件(导航事件来自方向输入设备的up、down、left、right组成);
[--pct-majornav PERCENT]
-4.主要导航事件(引发图形界面动作,如回退、菜单按键);
[--pct-syskeys PERCENT]
-5.系统按键事件(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键);
[--pct-appswitch PERCENT]
-6.调整启动Acticity百分比(在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法,从一个Activity跳转到另一个Activity);
[--pct-flip PERCENT]
-7.调整键盘翻转事件的百分比
[--pct-anyevent PERCENT]
-8.其它类型事件(它包罗了所有其它类型的事件,如:按键、不常用的设备按钮等)
记录monkey log的值:adb shell monkey -p com.xxx.xxx 1000 > C:\monkey.txt
调试选项
--dbg-no-events
-1.若指定了该参数,monkey将会执行初始启动,进入到一个测试Activity,不会再进一步生产事件。
--hprof
-2.若指定了该参数,monkey会在发送事件序列的前、后,生成性能分析报告。通常会在“data/misc”目录下生成一个5MB左右大小文件。
--ignore-crashes
-3.通常情况下,monkey会在待测应用程序崩溃或发生任何异常后停止运行。若指定了该参数,则monkey将会在产生异常后,继续向系统发送事件,直到指定的事件消息全部完成为止。
--ignore-timeouts -4.通常情况下,当应用程序发生任何超时错误(如“Application Not Responding” 对话框)时,monkey将停止运行,若指定了该参数,则monkey将会在产生错误消息后,继续向系统发送事件,直到指定的事件消息全部完成为止
--ignore-security-exceptions
-5.通常情况下,monkey会在被测应用程序发生权限方面的错误时停止运行。若指定了该参数,则monkey将继续向系统发送事件,直到指定的事件消息全部完成为止。
--kill-process-after-error
-6.通常情况下,当monkey由于一个错误而停止时,出错的应用程序就继续处于运行状态。当设置了此选项时,它将会通知系统停止发生错误的进程(注意:当monkey正常执行完毕后,它不会关闭所启动的应用,设备依然保留其最后接收到的消息状态,所以建议大家在执行命令以后为保持应用的初始状态,需手动或者脚本程序已经打开的应用进行关闭)。
--monitor-native-crashes
-7.监视由android C/C++代码部分引起的崩溃,若同时指定了--kill-process-after-error参数,则整个系统将会关机
--wait-dbg
-8.启动monkey后,先中断其运行,等待调试和它相连接。
测试参数建议
间隔时间:500毫秒;
种子数:随机;
遇到错误:不停止;
执行时长:每机型不小于12小时或点击次数:100万次;
机型覆盖建议:覆盖高中低端机型
不同芯片平台(高通、海思、MTK等)
不同分辨率(480*800以上主流分辨率)
不同安卓版本(安卓4.0以上主流安卓版本);
查看Monkey日志
可能产生的crash
Android平台应用程序可能产生以下四种Crash:
App层(JAVA应用程序):
1、Force Close Crash
2、ANR Crash
Native层(本地框架):
3、Tombstone Crash(Native Crash)
Kernel层(LINUX内核空间):
4、Kernel Panic
日志定位问题
主要Log文件说明
anr目录:从手机/data/anr导出的日志,保存发生anr crash 时的相关信息;
dontpanic目录:从手机/data/dontpanic/导出的日志,保存发生Kernel Panic时的相关信息;
Tombstone目录:从手机/data/tombstones/导出的日志,保存发生Tombstone Crash时的错误信息;
dropbox目录:从手机/data/tombstones/导出的日志,经过dropbox服务截取的部分tombstones错误信息;
BugReportLog.log:通过adb shell bugreport命令提取的系统各种信息;
MonkeyScreenLog.Log:保存Monkey测试过程、应用层错误信息,发生Native Crash时,在此文件也会有记录;
通过日志定位问题步骤
(1) 在MonkeyScreen.Log日志文件搜索关键词“Fatal”、“Crash”、“ANR”定位到发生Crash的详细堆栈信息,或分析发生Crash前后的日志事件;
(2)检查dropbox目录下是否有相关crash日志信息,主要关注是否有以下4类crash错误信息:data_app_wtf,data_app_anr,data_app_crash,system_server_watchdog;
(3) 检查tombstone目录是否有生成日志,有的话说明发生过native crash;
(4)通过anr目录中的日志文件或BugReport.log日志文件,进一步分析问题原因;
(5)通过上述日志信息,结合代码分析或通过搜索引擎寻找对应问题的可能错误,定位解决问题。