monkey是google提供的一个用于稳定性与压力测试的命令行工具。monkey程序由android系统自带,位于/sdcard/system/framework/monkey.jar中。 Monkey tools在Android内只能针对Activity做测试,不能对service做测试。
1.monkey在pc端测试的方法:
>adb shell monkey [option] <count>
/* [option] 测试条件(下面会做详细说明)
* <count> 测试次数
*/
eg:adb shell monkey -v -v -v 500
-v -v -v 日志级别为level 2 日志的详细程度越来越详细
最高可添加3个 -v,500为测试的次数
2.保存monkey运行的日志
adb shell monkey 后边不带测试条件时默认指定所有包即所有应用程序。
2.1 保存在手机上
eg:adb shell monkey > /sdcard/monkey.txt
这里的sdcard指的是存储路径即手机内部存储。> 是追加符,即将打印的log追加到monkey.txt文本中
2.2 保存在电脑上
adb shell monkey > monkey.txt
monkey.txt保存在PC的当前目录下。
3.monkey查看包名
方法1: adb shell pm list package
方法1:adb shell ls /data/data/
两者区别在于前者不需要root,后者需要root.
4.monkey可指定应用包进行测试。
eg:adb shell monkey -p com.android.camera 500
-p 后边跟包名,这里可指定一个包或多个包,要指定多个包需要使用多个-p选项,每个-p选项只能用于一个包。
eg:adb shell monkey -p com.android.camera -p com.android.mms 500
Monkey test中只能指定activity属性的应用包进行测试,当出现指定的应用程序不是activity的时候,monkey会出现log提示如下并终止运行:
这里只显示最后一行
log:
**No activities found to run,monkey abortd.
备注:activity和service的区别,activity是android应用的核心概念,简而言之activity为用户交互管理者,有一个可视界面呈现,而service是在后台运行,没有界面呈现。
5.monkey的log分析 (android中常见的错误)
查找关键字crash,anr。
anr:
>在5秒内没有相应的事件(例如,按键按下,屏幕触摸);
>BroadcastReciever在10秒内没有执行完毕。
crash:
>异常停止
>异常退出
6.查看monkey进程
monkey 进程:adb shell ps | grep monkey
杀死monkey进程:adb shell kill monkey
eg:
sue@suepc:~$ adb shell ps | grep monkey
shell 23444 537 2029252 49604 futex_wait 7fb2834170 S com.android.commands.monkey
sue@suepc:~$ adb shell kill 23444
sue@suepc:~$
7、Monkey发送的事件类型和频率
--pct-appswitch <percent>
调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
--pct-anyevent <percent>
调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等
--pct-touch <percent>
调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。
--pct-motion <percent>
调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)
--pct-trackball <percent>
整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)
--pct-nav <percent>
调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)
--pct-syskeys <percent>
调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)
-p <允许执行的包名列表>
如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包
-c <意图的种类>
如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选 择下列类别中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选 项只能用于一个类别。
8.monkey常见的测试策略
8.1.对设置进行旋转压力测试
adb shell monkey -p com.android.settings --pct-rotation 50 --ignore-crashes --ignore-timeouts --ignore-native-crashes --ignore-security-exceptions -v -v -v 20000
8.2.对整机的应用开启测试
adb shell monkey --pct-appswitch 100 --throttle 5000 -v -v -v 100000
8.3.测试设置,触摸事件30%,其他按键50%,错误停止20%,延时200
adb shell monkey -p com.android.settings --pct-touch 30 --throttle 200 --pct-anyevent 50 -v -v 10000
8.4..测试设置,随机种子数为100,延时10 秒 ,忽略所有错误
adb shell monkey -p com.android.settings -s 100 --throttle 10 --randomize-throttle -ignore-crashes --ignore-timeouts --ignore-native-crashes --ignore-security-exceptions -v -v -v 20000
9.monkey 无activity启动
-p com.android.phone -c android.intent.category.DEFAULT