Monkey测试的功能
Monkey是内置在Androidshell中的命令行工具。Monkey测试可以模拟用户点击行为,通过脚本的形式不断地执行,然后可以导出到本地日志,进行奔溃分析。模拟方式是系统发送伪随机的用户事件流。
Monkey测试的使用
设置ADB环境
将{android sdk location}\platform-tools
加入环境变量,以便使用终端执行adb命令。
编辑Monkey脚本
基本语法:
$ adb shell monkey [options] <event-count>
monkey脚本格式
脚本示例:
monkey -p com.arisan1000.android --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --pct-appswitch 30 --pct-touch 15 --pct-motion 50 --pct-anyevent 5 -s 1000 43200 2>/sdcard/error.txt 1>/sdcard/info.txt
Category | Option | Description |
---|---|---|
General� | --help | 打印简单的使用向导 |
-v | 每个-v表示增加信息的冗余级别。默认是Level 0,打印启动通知、测试结束和最终结果。Level 1,提供了较为详细的测试信息,如逐个发送到Activity的事件信息。Level 2,提供了更多的设置信息,如测试中选中或未选中的Activity信息。 | |
Events | -s <seed> | 指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的 |
--throttle <milliseconds> | 指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。 | |
--pct-touch <percent> | 调整触摸事件的百分比.(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)比如一个应用80%的操作都是触摸,那就可以将此参数的百分比设置成相应较高的百分比。如触摸返回、触摸签到等 | |
--pct-motion <percent> | 调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)也就是直线滑动事件如从左到有滑动解锁 | |
--pct-trackball <percent> | 作用:调整滚动球事件百分比。(滚动球事件由一个或多个随机的移动事件组成,有时会伴随着点击事件)如不规则滑动解锁 | |
--pct-nav <percent> | 调整基本的导航事件(上下左右),事件来自直接的输入设备。现在的设备一般没有设置导航按钮了。 | |
--pct-majornav <percent> | 调整“主要”导航事件的百分比。 (这些是通常会导致您的UI中的操作的导航事件,例如5向按键中的中心按钮,后退键或菜单键。) | |
--pct-syskeys <percent> | 按键消息比例,主页、后退、音量增减 | |
--pct-appswitch <percent> | 启动Activity的事件比例 | |
--pct-anyevent <percent> | 其他不常用的按键比例的设置,不常用 | |
-p <allowed-package-name> | 用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果不指定包,monkey将允许系统启动设备中的所有app。 | |
-c <main-category> | 指定启动Activity的category。若无指定,monkey会选择带有Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY的Activity。使用时,一个-c指定一个category,可以多次使用。 | |
Debugging | --dbg-no-events | 指定该选项时,Monkey会执行测试Activity的初始启动,但不会生成进一步的事件。为了获得更好的结果,可以结合 -v选项,一个或多个包限制 和 非0的throttle选项 (为了保持Monkey运行30s或以上)。这提供了一个监控应用调用的包转换的环境。 |
--hprof | 测试完成后生成内存快照,data/misc路径下生成,不常用,比较占空间 | |
--ignore-crashes | 在monkey测试的过程中遇到crash不终止monkey进程,直到计数结束。 | |
--ignore-timeouts | 在monkey测试的过程中遇到timeout error 或者 ANR 不终止monkey进程,直到计数结束。 | |
--ignore-security-exceptions | 忽略权限问题,直到事件计数结束。 | |
--kill-process-after-error | 当发生错误时终止monkey进程。 | |
--monitor-native-crashes | 监视崩溃时的本地代码。当设置 --kill-process-after-error时,monkey进程会停止。 | |
--wait-dbg | 当调试器失去连接时,停止monkey进程。 |
执行和停止脚本
- 连接设备并开启调试模式
- 执行脚本命令:复制脚本到终端
- 回车执行停止脚本,如下:
// 获取monkey所在的进程id
adb shell top | grep monkey
示例结果:
5447 0 1% S 10 262960K 10328K root com.android.commands.monkey
5447 0 0% S 10 262960K 10324K root com.android.commands.monkey
//彻底停止monkey进程
adb shell kill -9 5447
分析本地日志
- 找到是monkey里面的哪个地方出错。
- 查看Monkey里面出错前的一些事件动作,并手动执行该动作。
- 若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样。
参考
附录 A:Linux中的输入输出重定向
n> file 表示将文件描述符为 n 的文件重定向到 file。常见的文件描述符为:
文件描述符 | 名称 | 常用缩写 | 默认值 |
---|---|---|---|
0 | 标准输入 | stdin | 键盘 |
1 | 标准输出 | stdout | 屏幕 |
2 | 标准错误输出 | stderr | 屏幕 |
网友评论