monkey 学习
1.monkey 源码
adb shell cd /system/bin monkey
monkey 文档地址:<android_sdk>/docs/tools/help/monkey/html
官网地址:http://developer.android.com/tools/help/monkey.html
2.简要介绍
adb shell monkey <event-count>
这里event-count 是事件数而不是循环次数
只有当monkey传入脚本时,该值才为循环次数
adb shell monkey 1000
3.monkey 脚本
base = /system
export CLASSPATH=$ base/framework/monkey.jar
exec app_process $ base/bin com.android.commands.monkey.monkey $ *
调用com.android.commands.monkey.monkey包,定制monkey工具,则需要修改该包(原理篇描述)
4.monkey常规命令
adb shell monkey [options] <event-count> options指monkey可传入的参数
adb shell monkey -h 显示所有options命令list
adb shell monkey -v <event-count>
-v越多信息越全
-v 启动提示,测试结束,最终结果外提供较少信息
-v-v 详细信息如逐个发送到Activity的时间
-v-v-v 更详细安装信息,如测试中被选中或未被选中的Activity
4-1.monkey的事件类命令
adb shell monkey -f <scriptfile> <event-count> (可以跑脚本)
adb shell monkey -f /mnt/sdcard/test 1 (数字1为循环次数)
adb shell monkey -s <seed> <event-count> seed指可指定随机数生成
如果用相同的seed值再次运行monkey,将生成相同的时间序列
adb shell monkey --throttle <milliseconds> 事件之间的固定延迟
adb shell monkey --pct-touch <percent> 定义时间百分比(pct-touch 触摸事件百分比) 某一位置的Down-Up事件
adb shell monkey --pct-motion <percent> 定义Down事件后经过一系列伪随机时间后弹起(即up事件)
adb shell monkey --pct-traceball <percent> 伪随机移动以及偶尔跟在移动后面的点击事件
--pct-nav nav为基本导航事件(方向输入设备:上/下/左/右)
--pct--majornav 主要导航时间百分比 举例:ok、菜单、返回按键灯
--pct-systemnav 系统按键 举例:HOME键、BACK键、拨号键、挂断键、音量键
adb shell monkey --pct-appswtich <percent> 应用启动事件的百分比
adb shell monkey --pct-anyevent <percent> 其他类型事件百分比
5.结束类命令
$ adb shell monkey -p <allowed-packages-name> <event-count>
$ adb shell monkey -p com.xuben.test.settings 1000 运行com.xuben.test.settings包内activity 并发送1000个随机事件
$ adb shell monkey -c <main-category><event-count> Monkey命令限制在一个或几个类别中
如果不指定任何类别,monkey将选择Intent.CATEGORY_LAUNCHER和Intent.CATEGORY _monkey里的Activity
每个-c都对应一个类别(指定多个类别时每个类别名前都需要机上 -c)如:
$ adb shell monkey -c Intent.CATEGORY_LAUNCHER 1000 运行Intent.CATEGORY_LAUNCHER类别的Activity并发送1000个随机事件
6.调试类命令
对Monkey进行一些简单的调试,这样可以快速定位monkey运行中的问题
$ adb shell monkey --diag-no-events <event-count> 这个调试命令就可以轻松打入运行内部
$ adb shell monkey --hprof <event-count> monkey事件序列前后立即生成profiling report(该选项将在data/misc中生成5MB大小文件,慎用)
$ adb shell monkey --ignore-crashes --ignore-timeouts --ignore-security-exceptions --kill-process-after-error --monitor-native-crashes
崩溃或时空异常 超时错误ANR 启动有权限的Activity 通知系统停止发生错误进程 nativecode崩溃事件记录
$ adb shell monkey --wait-dbg 暂停执行的Monkey,直到有调试器与它连接
-Monkey命令小结
常用参数官网:http://developer.android.com/tools/help/monkey.html
$ adb shell monkey -v -v -v -p com.ingenic.glass.camera --throttle 200 1000
$ adb shell monkey -v -v -f /mnt/sdcard/test --throttle 200 30
Monkey监控并特殊处理的3个事件如下:
1.如果指定测试包,限制测试在指定的包中
2.如果应用Crash或存在未捕获的异常,monkey停止并报告错误
3.如果应用产生ANR错误,monkey停止并报告错误
ANR的两个条件: a.线程相应超过5s b.HandleMessage回调函数超过10s
其他:测试Log获取
用Monkey test测试,为了方便分析问题,可以在命令monkey命令后面加上 “|logcat -v time”,这样就能边测试边打印Log(记得用终端保存Log文本)例如:
adb shell monkey –p com.htc.Weather –v 20000|logcat -v time
但是这个组合在monkey测试完成后,logcat仍然在执行,测试时需要注意。
如果测试monkey碰到crash或者anr(程序强制性退出或不响应)现象时,在抓取log的同时需要提供traces.txt,步骤如下:
1. 测试版本需要具备root权限
2. 进入data/anr目录下面
3. 将traces.txt文件拷贝到TF卡中,然后拷贝出来发给软件分析即可