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

//保存在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

二、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,方便调用

  • 例如:

查询整个系统的包名命令:"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"

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之前错误的事件序列就可以进行之前出错的按键操作
  • 例如:

//使用-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

四、Monkey黑白名单

  • 黑名单:不测试的应用
  • 白名单:要测试的应用

如果要测试的应用太多,使用太多-p太麻烦,这时候就可以用刀黑白名单了,需要注意的是,黑名单和白名单只能设置一个


选项


说明

–pkg-blacklist-file apk黑名单,屏蔽掉黑名单中的apk不操作
PACKAGE_BLACKLIST_FILE apk黑名单,屏蔽掉黑名单中的apk不操作
–pkg-whitelist-file apk白名单,只操作包含在白名单红的apk
PACKAGE_WHITELIST_FILE apk白名单,只操作包含在白名单红的apk
  • 例如:

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

五、Monkey结果解读

1.Monkey结果分类

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

2.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

//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参数控制

2)Creash输出异常格式:

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("\n","\n//"));//输出

  • 例:creash输出log:

//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)

2.Java常见错误类型

  • 例如:

异常与错误类型
说明

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
内存溢出错误

七、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

原文地址:https://www.cnblogs.com/QaStudy/p/11791297.html

时间: 2024-11-04 19:34:24

Android Monkey介绍的相关文章

Android平台介绍

一.Android平台介绍 什么是智能手机 具有独立的操作系统,独立的运行空间,可以由用户自行安装软件.游戏.导航等第三方应用程序,并可以通过移动通讯网络来实现无线网络接入的手机类型总称. 智能手机操作系统 Android.IOS.Windows Phone.BlackBerry.Symbian 什么是Android Android是一种基于Linux的开源操作系统,主要使用于移动设备,例如智能手机.平板电脑.智能手表.智能电视等等.由Google公司和开放手机联盟领导及开发.Android操作

android AsyncTask介绍

本文转自:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html 写的很好,向你们推荐 android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主

Android bluetooth介绍(一):基本概念及硬件接口

关键词:蓝牙硬件接口 UART  PCM  blueZ 版本:基于android4.2之前版本 bluez内核:linux/linux3.08系统:android/android4.1.3.4作者:xubin341719(欢迎转载,请注明作者,请尊重版权谢谢)欢迎指正错误,共同学习.共同进步!! 一.基本概念补充 1.AP:ApplicationProcessor应用处理器 采用ARM架构的CPU,通常负责运行OS和一些特定设置和载入开机预设.比如一个没有电话功能的平板电脑,只跑android或

Android bluetooth介绍(二): android 蓝牙代码架构及其uart 到rfcomm流程

关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP RFCOMM  版本:基于android4.2之前版本 bluez内核:linux/linux3.08系统:android/android4.1.3.4作者:xubin341719(欢迎转载,请注明作者,请尊重版权谢谢)欢迎指正错误,共同学习.共同进步!!一.Android Bluetooth Architecture蓝牙代码架构部分(google 官方蓝牙框架) Android的蓝牙系统,自下而上包括以下一些

Android Configuration介绍 (未完成)

博客很空,想赶紧填一篇东西,选的这个题目看了下中文网络中还不是很常见,但是由于我也不了解全部的configuration,需要验证思路,写起来也很慢,先发个未完成的占座. 所谓Configuration指的是Configuration.java这个类所代表的配置信息,它的位置在($ANDROID_ROOT)/frameworks/base/core/java/android/content/res/Configuration.java 本文分三部分: 一. 逐一讲解成员变量,了解功能和每一个数值

android monkey

# monkey usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...] [-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...] [--ignore-crashes] [--ignore-timeouts] [--ignore-security-exceptions] [--monitor-native-crashes] [--ignore-native-crashes] [--kill-process-

Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

关键词:蓝牙blueZ  A2DP.SINK.sink_connect.sink_disconnect.sink_suspend.sink_resume.sink_is_connected.sink_get_properties.AUDIO.DBUS版本号:基于android4.2之前版本号 bluez内核:linux/linux3.08系统:android/android4.1.3.4作者:xubin341719(欢迎转载.请注明作者.请尊重版权谢谢)欢迎指正错误.共同学习.共同进步!! 參考

Android Monkey自动化测试

前言 如果你做Android开发,还没有使用过Monkey进行测试,那么今天看到这篇文章,希望能解决你Android测试中的一些问题.起码能帮你省点测试的时间并且发现更多的问题. Monkey简介 Monkey是一个可运行在模拟器和实际设备中的Android命令行自动化测试工具,它可以模拟伪随机的用户事件流,例如点击.触摸.手势等.你可以使用Monkey对正在开发的程序进行压力测试. Monkey的特征: 测试的对象为程序包名,通过-p参数指定. Monkey测试使用的事件流.数据流是随机的,不

Android入门介绍

Android入门介绍 3G.4G 第三代移动通信技术(3rd - Generation),速率一般在几百Kbps,较之前的2G和2.5G在数据传输速度上有很大提升. 第四代移动通信技术(4th - Generation),速度可达到100Mbps以上,几乎可以满足人们的所有传输数据的需求. 目前主流的3G技术标准有三种: WCDMA:全球80%以上的3G网络都是采用此种制式.中国联通运营.186 CDMA2000:目前日韩及北美使用较多.中国电信运营. 189 TD-SCDMA:中国自主知识产