Android Monkey介绍

从来好事天生俭,自古瓜儿苦后甜。这篇文章主要讲述Android Monkey介绍相关的知识,希望能为你提供帮助。
一、android Monkey介绍:
1.Monkey是Google提供的一个用于稳定性与压力测试的命令行工具
2.Monkey路径:
Monkey程序是Android系统自带的

路径:/system/farmwork/Monkey.jar 启动脚本路径:/system/bin/Monkey

Monkey是由adb命令启动的,所以只要配置adb环境即可:
1.下载android SDK
2.环境变量配置很简单,百度一下就可以
3.命令格式:
1)直接PC启动
adb shell monkey[option] 例如:” adb shell monkey 100” 表示在设备上乱按100次

2)shell端启动
adb shell //进入手机终端命令 monkey[option] //使用monkey命令

3)保存Monkey运行log
Android Monkey介绍

文章图片
//保存在PC中: adb shell monkey [option] > d:monkey.txt //保存在手机中: monkey[option] > /mnt/sdcard/monkey.txt //标准流与错误流分开保存: monkey[option] 1> /mnt/sdcard/monkey.txt 2> /mnt/sdcart/error.txt

Android Monkey介绍

文章图片
二、Monkey基本参数与事件参数
1.基本参数:
方法
说明
-help
打印帮助信息
 
-v
Monkey向命令行打印输出的log信息级别
默认级别0(-v):-v只打印启动信息,测试完成信息和最终结果信息
级别1(-v-v):-v打印执行时的一些信息,如发送事件
级别2(-v-v-v-v):-v -v打印最详细信息
 

 

  • 例如:
"monkey -help" "monkey -v" "monkey -v -v""monkey -v -v -v"

2.约束条件:
 
选项
说明
-P< 允许执行的包名列表> 如果使用此参数指定一个或多个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其他包里的Activity(如选取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包的Activity。要指定多个包需要使用多个-p选项,每个-p选项只能指定一个包
-c< 意图的总类> 如果用此参数指定了一个或几个类别,Monkey将只允许系统启动这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选择下列类别中列出的Activity:Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别需要使用多个-c选项,每个-c选项只能用于一个类别
 
 
 
  • 注意:
1)使用-p启动必须在设备桌面上有图标才可以,-c就针对桌面没图标的应用。
2)Activity可以在应用的xml文件中< Activity> 标签中查看
3)能用-p启动的应用,也就是在桌面上可以显示出图标的应用在xml文件的< Activity> 标签中一定有这个:< category android:name="android.intent.category.LAUNCHER"/>
4)如果要使用-c参数,也就是要在xml文件的< Activity> 标签中加入< category android:name="PackageName.MONKEY"/> 相当于是我们自定义的。也是没有桌面图标的。自定义的时候最好是包名.Monkey,方便调用
  • 例如:
Android Monkey介绍

文章图片
查询整个系统的包名命令:"adb shell pm list packages"可以在后面加"> d:pag.txt"输出所有列表到d盘 //测试时钟100次,并输出信息 "adb shell monkey -p com.android.deskclock -v 100" //测试时钟和email各100次,并输出信息 "adb shell monkey -p com.android.deskclock -p com.android.deskemail -v 100" //使用-c参数。PackageName.MONKEY为注意事项4中改的 "adb shell monkey -c PackageName.MONKEY 300"

Android Monkey介绍

文章图片
3.事件:
选项
说明
-s
伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列
– throttle< 毫秒>
在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被产生
– randomize-throttle 在事件之间插入随机延迟,需要与– throttle配合使用,随机延迟范围为(0– throttle设置的时间)
– pct-touch 调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某一个单一位置)
– pct-motion 调整动作事件的百分比(动作事件由屏幕上某一处的一个down事件、一系列的伪随机事件和一个up事件组成)
– pct-trackball 调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)
– pct-nav 调整” 基本” 导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)
– pct-majornav 调整” 主要” 导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键,回退按键,菜单按键等)
– pct-syskeys 调整” 系统” 按键事件的百分比(这些按键通常被保留,由系统使用,如Home,Back,音量控制键等)
– pct-appswitch 调整启动activity的百分比。在随机间隔里,monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
– pct-anyevent 调整其他类型事件的百分比。包括:按键、其他不常用的设备按钮等
– pct-filp 调整键盘换出隐藏的百分比
– pct-pinchzoom 调整两指缩放压缩手势的百分比
 
  • 注意:
1)-s 因为monkey是随机对actyivity进行操作,因此,当出现错误的时候如果需要复现或者回归,我们只需-s之前错误的事件序列就可以进行之前出错的按键操作

  • 例如:
Android Monkey介绍

文章图片
//使用-s操作时钟应用上activity100次。如果不用-s的话,每次操作的seed值就会不同,那样就没法固定复现或者回归 "adb shell monkey -p com.android.deskclock -s 100 -v -v 100" //以每次间隔200毫秒的延时操作时钟100次 "adb shell monkey -p com.android.deskclock --throttle 200 -v 100" //以每次间隔0-200毫秒的随机延时操作时钟100次 "adb shell monkey -p com.android.deskclock --throttle 200 --randomize-throttle -v 100" //以每次间隔0-200毫秒的随机延时操作时钟100次,每次操作都执行触摸操作(参数后面的100就是百分比数) "adb shell monkey -p com.android.deskclock --pct-touch 100 --throttle 200 --randomize-throttle -v 100" //对时钟操作100次,每次都执行轨动作事件(参数后面的100就是百分比数) "adb shell monkey -p com.android.deskclock --pct-motion 100-v 100" //以此类推轨迹事件、基本导航事件、主要导航事件、系统按键事件、主要导航事件、等,需要注意的是百分比事件可以连用。按照百分比分配即可,当然所有事件的总和不能超过100

Android Monkey介绍

文章图片
四、Monkey黑白名单
  • 黑名单:不测试的应用
  • 白名单:要测试的应用
如果要测试的应用太多,使用太多-p太麻烦,这时候就可以用刀黑白名单了,需要注意的是,黑名单和白名单只能设置一个
选项
说明
– pkg-blacklist-file apk黑名单,屏蔽掉黑名单中的apk不操作
PACKAGE_BLACKLIST_FILE apk黑名单,屏蔽掉黑名单中的apk不操作
– pkg-whitelist-file apk白名单,只操作包含在白名单红的apk
PACKAGE_WHITELIST_FILE apk白名单,只操作包含在白名单红的apk
 
  • 例如:
Android Monkey介绍

文章图片
//假设设置黑名单:"com.android.contacts","com.android.launcher"首先先将这两个包名存放在一个txt文件中(一行一个包名)。比如说是:d:lacklist.txt。为了方便记忆,使用参数名作为文件名是一个不错的选择 //先将黑名单push到设备中,需要记住下面push到的路径。 "adb push d:reak.txt /data/local/tmp" //除了黑名单外的整机测试,延时200毫秒操作300次 "adb shell monkey --keg-blacklist-file /data/local/tmp/blacklist.txt --throttle 200 300" //白名单也是同理

Android Monkey介绍

文章图片
五、Monkey结果解读
1.Monkey结果分类
  • Mlokey运行log输出,按照以下顺序输出:
1)测试命令信息随机种子、运行次数、可运行的应用列表、各事件百分比 2)伪随机事件流11大事件流 3)异常信息ANR、CRASH等异常 4)测试结果信息完成事件、旋转情况、案件情况、网络状态

2.Monkey结果详细解读

Android Monkey介绍

文章图片

 
Android Monkey介绍

文章图片

 
Android Monkey介绍

文章图片

 
Android Monkey介绍

文章图片

 
Android Monkey介绍

文章图片

 
Android Monkey介绍

文章图片

【Android Monkey介绍】 
Android Monkey介绍

文章图片

 
1)有一个隐藏属性,旋转。命令为:
adb shell monkey – pct-rotation 100 – throttle 2000 10//两秒间隔旋转10次

六、Monkey异常结果
1.Monkey异常结果
1)ANR输出异常格式:
//ANR无响应,哪一个进程没响应,进程号(Pid)是多少 System.err.println("//NOT RESPONDING:"+"(pid"+pdi+")");

  • 例:ANR输出log
Android Monkey介绍

文章图片
//NOT RESPONDING:com.android.quicksearchbox(pid 6333) //哪一个进程ANR ANR in com.android.quicksearchbox(com.android.quicksearchbox/.SearchActivity) //CPU使用情况 CPU usage from 8381ms to 2276ms ago: //内存信息 procrank:→ 通过"adb shell procrank"命令输出 //trace信息 anr traces:→ 保存于/data/anr/traces.txt //meminfo信息 meminfo:→ 通过"adb shell dumpsys meminfo"命令输出 //Bugereport信息 Bugreport:→ 通过"adb bugreport"命令输出,可用--bugreport参数控制

Android Monkey介绍

文章图片
2)Creash输出异常格式:
Android Monkey介绍

文章图片
System.err.println("//CREAAH:"+processName+"(pid"+pdi+")"); //creash的进程名+进程号 System.err.println("//Short Msg:"+ShortMsg); //错误类型,短消息 System.err.println("//Long Msg:"+LongMsg); //错误类型,长消息 System.err.println("//Build Lable:"+Build.FINGERPRINT); //系统属性 System.err.println("//Build Changelist:"+Build.VERSION.INCREMENTAL); //系统属性 System.err.println("//Build Time:"+Build.TIME); //系统属性 System.err.pringln("//"+stackTrace.replace(" "," //")); //输出

Android Monkey介绍

文章图片
  • 例:creash输出log:
Android Monkey介绍

文章图片
//Crash:com.android.quicksearchbox(pid 1699) //Short Msg:java.lang.NullPointerException //Long Msg:java.lang.NUllPointException:Attempt to invoke virtual method‘com.android.quicksearbox.SourceResult com.android.quicksearchbox.Suggestions.getResult()‘ on a null object reference //可以通过"adb shell"进入手机后使用"getprop | grep 86"查看该系统属性 //Build Lable:generic/vbox86p:5.0/LRX21M/buildbot12160004:userdebug/test-keys //可以通过"adb shell"进入手机后使用"getprop | grep bot"查看该系统属性 //Build Changelist:eng.buildbot.20141216.000103 //可以通过"adb shell"进入手机后使用"getprop | grep time"查看该系统属性 //Build Time:1318684697000 //java.lang.RuntimeException:Unable to stop activity{com.android.quicksearchbox/com.android.quicksearchbox.SearchActivity}:java.lang.NullPointerException:Attempt to invoke virtual method ‘com.android.quicksearchbox.SourResult com.android.quicksearchbox.Suggestions.getResult()‘ on a null object reference //at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3344) //creash的一些信息 //at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3344) //at android.app.ActivityThread.handleStopActivity(ActivityThread:java:3390) //at android.app.ActivityThread.access$1100(ActivityThread:java:144) //at android.app.ActivityThread$H.handleMessage(ActivityThread:java:1307) //at android.os.Handler.dispatchMessage(Handler.java:102) //at android.Looper.loop(Looper.java:135)

Android Monkey介绍

文章图片
2.Java常见错误类型
  • 例如:
Android Monkey介绍

文章图片
异常与错误类型 说明java.lang.NullPointerException 空指针异常java.lang.ArraIndexOutOfBoundsException 数组溢出java.lang.ClassNotFoundException 类不存在java.lang.ArithmeticException 数学运算异常java.lang.IllegalArgumentException 方法参数异常java.os.FileNotFoundException 文件未找到java.lang.NumberFormatException 数值转化异常java.lang.StackOverflowError 堆栈异常错误java.lang.OutOfMemoryError 内存溢出错误

Android Monkey介绍

文章图片
 
七、Monkey测试策略介绍
  • 策略例子1:整机测试,而不测试拨号盘应用,忽略所有错误,次数100万次
adb shell monkey --ignore-creashes --ignore-timeouts --pke-blacklist-file /data/local/tmp/blacklist.txt -v -v 1000000

  • 策略例子2:测试计算器30万次,随机种子为100,随机延迟0-1秒,忽略所有错误
adb shell monkey -p com.android.calculator2 -s 100 --throttle 1000 --randomize-throttle --ignore-creashs --ignore-timeouts -v -v 300000

  • 策略例子3:测试计算器,触摸事件30%,其他按键50%,错误停止,延时200
adb shell monkey -p com.android.calculator2 --throttle 200 --pct-touch 30 --pct-anyevent 50 -v -v 100000

  • 策略例子4:对计算器进行旋转压力测试,事件延时2秒,10W次
adb shell monkey -p com.android.calculator2 -pct-rotation 100 --throttle 2000 100000

  • 策略例子5:仅对整机的应用开启测试,事件延时5秒,10W次
adb shell monkey --pct-appswitch 100 --throttle 5000 100000


    推荐阅读