android测试monkey之旅3-monkey测试工具总结
之前的博客已经提过了,monkey是一个随机流的android性能测试工具。在这篇文档里,我将总结我自学道路上的一些经验,以及命令的解析。
1.进入monkey环境
1.1首先检测android真机/模拟器是否已经连接:adb device
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
接下来的一些内容请看我的谈谈我的无线测试之路(一个初学者的话)-monkey官网的中文翻译
在这里我来写个高级的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
引用无线学院创始人-自娱的公开课ppt,我们来看一下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的性能测试,就是要去抓crash,内存问题,例如以下:
1.anr in com.tencent.mms
crash on com.a.b.c 173。。。
2.CPU
3.Memory,,,
如何把你的monkey命令行的log输出:adb shell monkey xxxx >D:\a.txt xxx是你的指令