之前的博客已经提过了,monkey 是一个随机流的 android 性能测试工具。在这篇文档里,我将总结我自学道路上的一些经验,以及命令的解析。
1.2 然后选取一个设备来进入 shell:adb -s XX 设备 shell,当然如果你只有一个设备,完全可以写 adb shell
2.进入 shell 之后 monkey help 查看 monkey 的帮助,当然你可以去官网看手册来进行学习
3.查看本机的包,应用 package
adb shell pm list package -3
-s 系统应用
-3 第三方应用
这里请注意,在 monkey 里我们测试性能的是应用的包
另外附上一些额外的知识:
应用包名 package 和入口 activity 名称的方法:
方法一:使用 aapt //aapt 是 sdk 自带的一个工具,在 sdk\builds-tools\目录下
1.以 ES 文件浏览器为例,命令行中切换到 aapt.exe 目录执行:aapt dump badging E:\apk\es3.apk
2.运行后的结果中以下两行分别是应用包名 package 和入口 activity 名称
package: name=’com.estrongs.android.pop’
launchable-activity: name=’com.estrongs.android.pop.view.FileExplorerActivity’
注:在 android sdk 目录搜索可以找到 aapt.exe,如果没有可以下载 apktool。
这样我们就看到包了把,这里我查找的是第三方应用的包
4.Monkey 操作的参数解析,以及结果的分析
4.1 参数-p 用于约束限制,用此参数指定一个或多个包(Package,即 App)。指定包之后,Monkey 将只允许系统启动指定的 APP。如果不指定包,Monkey 将允许系统启动设备中
的所有 APP。
指定一个包: adb shell monkey -p com.htc.Weather 100
说明:com.htc.Weather 为包名,100 是事件计数(即让 Monkey 程序模拟 100 次随机用户事件)。
指定多个包:adb shell monkey -p com.htc.Weather –p com.htc.pdfreader -p com.htc.photo.widgets 100
不指定包:adb shell monkey 100
说明:Monkey 随机启动 APP 并发送 100 个随机事件。
之前,我们有说第三方跟系统的包名的查看。那么要查看设备中所有的包,在 CMD 窗口中执行以下命令:
adb shell
#cddata/data
#ls
4.2 参数: -v
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分 3 个级别,分别对应的参数如下表所示:
日志级别 Level0
示例 adb shellmonkey -p com.htc.Weather –v 100
说明 缺省值,仅提供启动提示、测试完成和最终结果等少量信息
日志级别 Level 1
示例 adb shellmonkey -p com.htc.Weather –v -v 100
说明 提供较为详细的日志,包括每个发送到 Activity 的事件信息
日志级别 Level 3
示例 adb shellmonkey -p com.htc.Weather –v -v –v 100
说明 最详细的日志,包括了测试中选中/未选中的 Activity 信息
4.3 参数: -s
用于指定伪随机数生成器的 seed 值,如果 seed 相同,则两次 Monkey 测试所产生的事件序列也相同的。
示例:
Monkey 测试 1:adb shell monkey -p com.htc.Weather –s 10 100
seed 值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;这个-s 就是指定了操作的顺序!
4.4 参数: --throttle <毫秒>
用于指定用户操作(即事件)间的时延,单位是毫秒;
示例:adb shell monkey -p com.htc.Weather –throttle 3000 100
在这里我来写个高级的 demo 给大家分析一下 monkey 的指令:
adb shell monkey -p com.tmall.wireless -v -v -pct-touch 50 -pct-trackball 30 -throttle 300 100
用 monkey 测试天猫的这个包触摸操作百分之 50,轨迹球操作百分之 30,其它操作百分之 20,总共进行 100 次随机点击,事件之间间隔 300ms
我们来看一下 Monkey 的特征:
1.测试的对象仅为应用程序包,有一定局限性
2.Monkey 测试使用的事件随机流是随机的,不能进行自定义
3.可对 MonkeyTest 的对象,事件数量,类型,频率等进行设置
Monkey 的停止条件:
1.如果限定了 Monkey 运行在一个或者几个特定包上,那么他会监控测试图到其它包的操作,并对其进行组织
2.应用程序崩溃或接收到任何失控异常
3.应用程序不响应
4.正常运行结束
5.强制停止进程
最后是重头戏,monkey 测试结果的分析!
1.seed=1418535683701,count=50 随机码 seed 为这么一串数字,操作事件的序列的一个标识。count
2.select main activity。。。LANCHER 选择了哪些 activity
Using main activity 指的是能启动这些 activity,而不是刚刚启动的
3.selecting main activities from category android.intent.category.Monkey
Monkey 启动了哪些 activities
4.Monkey 测试的事件,有 11 种
5.
主 acitivity 名为 com.mediatek.stkselection
6 模拟用户的操作,每一次的操作
7.如果在这个过程中遇到了 Reject start OfIntent //拒绝此跳转,因为它是跳转到非他自己的包的 Acitivity
8.Dropped: keys=9 pointers=0 trackballs=0 flips=0 rotations=0
丢弃的,键=9,指针=0,轨迹球=0,翻转=0
9.最后就是统计时间了,单位为 ms
出现 crash,性能问题的场景:
如何把你的 monkey 命令行的 log 输出:adb shell monkey xxxx >D:\a.txt xxx 是你的指令