Android测试之Monkey

会挽雕弓如满月,西北望,射天狼。这篇文章主要讲述Android测试之Monkey相关的知识,希望能为你提供帮助。
自己用的测试 C:\Users\Star> adb shell monkey -p com.cmstop.android --monitor-native-crashes -- pct-touch 30 -s 1 -v -v -v --throttle 200 100000   (不容易停下来) C:\Users\Star> adb shell monkey -p com.cmstop.android -v 500 --ignore-crashes    开始— > 运行— > cmd     3.   usb连接手机,输入 adb shell 命令,待出现
  即可输入以下内容   4.   进入手机后,输入相应的monkey命令即可测试   5.   手机会总动monkey测试,会在T卡中生成两个文件。log.log 和log_err.log    
针对系统:     monkey --ignore-crashes --ignore-timeouts --kill-process-after-error   --ignore-security-exceptions --throttle 1000 -v -v -v -s 5 60000000 1> > /sdcard/log.log 2> > /sdcard/log_err.log  
  针对单个包:     monkey -p com.android.contacts --monitor-native-crashes --pct-touch 30 -s 1 -v -v -v --throttle 200 100000 1> > /sdcard/camera.log 2> > /sdcard/camera_err.log
写在前面的话 Android官方对Monkey进行了简单介绍,网上也有不错的翻译。这部分就直接引用官网的原文和网友的翻译。个人理解不同所以觉得有必要把官网原文贴出来。你也可以直接参见https://developer.android.com/tools/help/monkey.html。本文适合android测试人员阅读,欢迎交流讨论。 
Monkey是什么 Monkey是可以运行在模拟器里或实际设备中的程序。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。 The  Monkey  is  a  program  that  runs  on  your  emulator  or  device  and  generates  pseudo-random  streams  of  user  events  such  as  clicks,  touches,  or  gestures,  as  well  as  a  number  of  system-level  events.  You  can  use  the  Monkey  to  stress-test  applications  that  you  are  developing,  in  a  random  yet  repeatable  manner. 
Monkey简介 Monkey是一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:·   基本配置选项,如设置尝试的事件数量。
·   运行约束选项,如设置只对单独的一个包进行测试。
·   事件类型和频率。
·   调试选项。
在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理:
·   如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。
·   如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。
·   如果应用程序产生了应用程序不响应(application  not  responding)的错误,Monkey将会停止并报错。
按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。   
The  Monkey  is  a  command-line  tool  that  that  you  can  run  on  any  emulator  instance  or  on  a  device.  It  sends  a  pseudo-random  stream  of  user  events  into  the  system,  which  acts  as  a  stress  test  on  the  application  software  you  are  developing. 
The  Monkey  includes  a  number  of  options,  but  they  break  down  into  four  primary  categories: 

  • Basic  configuration  options,  such  as  setting  the  number  of  events  to  attempt.
  • Operational  constraints,  such  as  restricting  the  test  to  a  single  package.
  • Event  types  and  frequencies.
  • Debugging  options. 
When  the  Monkey  runs,  it  generates  events  and  sends  them  to  the  system.  It  also  watches  the  system  under  test  and  looks  for  three  conditions,  which  it  treats  specially: 
  • If  you  have  constrained  the  Monkey  to  run  in  one  or  more  specific  packages,  it  watches  for  attempts  to  navigate  to  any  other  packages,  and  blocks  them.
  • If  your  application  crashes  or  receives  any  sort  of  unhandled  exception,  the  Monkey  will  stop  and  report  the  error.
  • If  your  application  generates  an  application  not  responding  error,  the  Monkey  will  stop  and  report  the  error. 
Depending  on  the  verbosity  level  you  have  selected,  you  will  also  see  reports  on  the  progress  of  the  Monkey  and  the  events  being  generated.   

Monkey的基本用法  可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb  shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下:
$  adb  shell  monkey  [options] 
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:
$  adb  shell  monkey  -p  your.package.name  -v  500 
You  can  launch  the  Monkey  using  a  command  line  on  your  development  machine  or  from  a  script.  Because  the  Monkey  runs  in  the  emulator/device  environment,  you  must  launch  it  from  a  shell  in  that  environment.  You  can  do  this  by  prefacing  adb  shell  to  each  command,  or  by  entering  the  shell  and  entering  Monkey  commands  directly.
The  basic  syntax  is:
$  adb  shell  monkey  [options] 
With  no  options  specified,  the  Monkey  will  launch  in  a  quiet  (non-verbose)  mode,  and  will  send  events  to  any  (and  all)  packages  installed  on  your  target.  Here  is  a  more  typical  command  line,  which  will  launch  your  application  and  send  500  pseudo-random  events  to  it:
$  adb  shell  monkey  -p  your.package.name  -v  500

命令选项参考  --help
列出简单的用法。

-v
命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。

事件
-s
伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。

--throttle
在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被产成。

--pct-touch
调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。

--pct-motion
调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。

--pct-trackball
调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。

--pct-nav
调整“ 基本” 导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。

--pct-majornav
调整“ 主要” 导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

--pct-syskeys
调整“ 系统” 按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)。

--pct-appswitch
调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。

--pct-anyevent
调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。

约束限制
-p
如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的 Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何 包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。

-c
如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选 择下列类别中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选 项只能用于一个类别。

调试
--dbg-no-events
设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约 束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。

--hprof
设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(~5Mb),所以要小心使用它。

--ignore-crashes
通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

--ignore-timeouts
通常,当应用程序发生任何超时错误(如“ Application Not Responding” 对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

--ignore-security-exceptions
通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。

--kill-process-after-error
通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。

--monitor-native-crashes
监视并报告Android系统中本地代码的崩溃事件。如果设置了--kill-process-after-error,系统将停止运行。

--wait-dbg
停止执行中的Monkey,直到有调试器和它相连接。

使用Monkey流程总的来说使用monkey进行测试是比较简单的,只是需要做一些比较复杂的准备工作。下面详解测试步骤(很简单的哦),所讲内容是建立在已经配置好ADB环境的基础上(如果这部分不清楚请先google一下先配置好环境,这里不做描述)。1、ADB连接Android测试设备。2、确定你要测试的应用的PackageName。3、使用Monkey发一条测试命令。    步骤详解步骤确实很简单吧。不敢保证读者都明白如何去完成上面的步骤,这里讲讲每步如何做。
1、ADB连接Android测试设备。
如果你用的是模拟器,那么启动后通常是已经连在ADB上了。对于真机来说两种方式都可以:
方式一:使用USB把Android设备接到PC上,然后装上驱动(不好找驱动的话就用豌豆荚吧)。
方式二:首先得确保你的Android已经成功root了,那么可以使用wifi无线连接。①下载一个wifi  adb应用装在你的android设备上;②在android上打开wifi  adb;③在pc上的命令行中输入wifi  adb中显示的那部分内容:adb  connect  192.168.x.x,命令行中显示connected  192.168.x.x那么说明连接好了。
我比较喜欢方式二,这样可以不用去下载驱动(主要是驱动很多都不稳定),而且不伤害电池。长时间插在USB上对电池始终是不好的。只不过这种方式设备一旦休眠那么就可能需要重连。
2、确定你要测试的应用的PackageName。
先说明一下这里讲的方法是通用的,而网上其他方法获取PackageName不然不通用(因为他是建立在root的基础上的,我不敢保证你的设备已经root)。
①在android设备上点击一下你要测试的设备,然后就不用操作设备了。
②在PC上的命令行输入:adb  logcat> D:/log.txt  *:I 
 
在这里的D:/log.txt你可以改成其他的路径,但是一定要先确保路径下没有这个文件,不然的话你以前的文件就被改掉了,一定要小心。
③按下Ctrl+c先停掉(为了避免过多的新信息)。打开刚刚的那个文件D:/log.txt。从文件最下面开始找下面格式的信息
I/ActivityManager(  数字):  Displayed  包名/类名:  +数字ms
例如我的信息如下:
 
I/ActivityManager(    272):  Displayed  com.vane/.act.ActLauncher:  +315ms
不过你可能会发现有很多这种格式的信息,到底哪个才是你需要的呢,如果你严格按照刚刚的步骤做的话,那么很可能是最下面那条信息,即使不是那么也肯定是最下面几条信息中的某一条,这需要你根据应用进行辨别。
④记下你刚刚得到的包名,例子中的包名为“ com.vane” 。马上就会用。
3、使用Monkey发一条测试命令。
这一步就比较简单了。直接在pc上的命令行输入:adb  shell  monkey  -p  com.vane  -v  50
备注:上面命令中的com.vane就是之前获得的包名;命令中的参数你可以自己根据需要参考上面的参数文档进行修改。
4、观察android设备,直到Monkey停止。
5、如果应用崩溃的话就好分析一下Monkey中的信息。
 
总结【Android测试之Monkey】Monkey的使用确实比较简单,但是在测试中确有不小的作用,值得使用。
文字若有不妥之处希望读者提出你的宝贵意见。欢迎拍砖。
 
 
转载过来的一篇文章
  写完应用之后,作完单元测试和功能测试,有必要对应用的抗打击能力做个测试,最好的方法是雇个“ 猴子” 在测试,猴子可以胡乱瞎按键,在这种情况下,你的应用是否还能正常工作呢?
Android  测试包中提供了一个Monkey工具,就提供了“ 猴子” 功能,不过比真” 猴子“ 还要智能一些,你还可以指挥这个猴子, 比如按键的比例,触发某个事件的频率等等。
一个简单的用法,比如你的应用程序的包名为:com.pstreets.navigator
可以使用    adb shell monkey -p com.pstreets.navigator -v 500
使用缺省的配置 向应用发送500 个随机事件(包括按键,touch事件,系统事件等),该命令会首先启动对应的Activity,然后向该应用发送随机事件:
Android测试之Monkey

文章图片

Monkey工具的详细说明如下:
它是一个命令行工具 ,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:
· 基本配置 选项,如设置尝试的事件数量。
· 运行约束选项,如设置只对单独的一个包进行测试。
· 事件类型 和频率。
· 调试选项。
在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理:
· 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。
· 如果应用程序崩溃或接收到任何失控异常 ,Monkey将停止并报错。
· 如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。
按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。
Monkey基本用法
可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下:
$ adb shell monkey [options]
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装 在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:
$ adb shell monkey -p your.package.name -v 500
– v
命令行的每一个 -v 将增加反馈信息的级别。 Level 0( 缺省值 ) 除启动提示、测试完成和最终结果之外,提供较少信息。 Level 1 提供较为详细的测试信息,如逐个发送到 Activity 的事件。 Level 2 提供更加详细的设置信息,如测试中被选中的或未被选中的 Activity 。
事件
-s < seed>
伪随机数生成器的 seed 值。如果用相同的 seed 值再次运行 Monkey ,它将生成相同的事件序列。
– throttle < milliseconds>
在事件之间插入固定延迟。通过这个选项可以减缓 Monkey 的执行速度。如果不指定该选项, Monkey 将不会被延迟,事件将尽可能快地被产成。
– pct-touch < percent>
调整触摸事件的百分比 ( 触摸事件是一个 down-up 事件,它发生在屏幕上的某单一位置 ) 。
– pct-motion < percent>
调整动作事件的百分比 ( 动作事件由屏幕上某处的一个 down 事件、一系列 的伪随机事件和一个 up 事件组成 ) 。
– pct-trackball < percent>
调整轨迹事件的百分比 ( 轨迹事件由一个或几个随机的移动组成,有时还伴随有点击 ) 。
– pct-nav < percent>
调整“ 基本” 导航事件的百分比 ( 导航事件由来自方向输入设备的 up/down/left/right 组成 ) 。
– pct-majornav < percent>
调整“ 主要” 导航事件的百分比 ( 这些导航事件通常引发图形界面中的动作,如: 5-way 键盘的中间按键、回退按键、菜单按键 )
– pct-syskeys < percent>
调整“ 系统” 按键事件的百分比 ( 这些按键通常被保留,由系统使用,如 Home 、 Back 、 Start Call 、 End Call 及音量控制键 ) 。
– pct-appswitch < percent>
调整启动 Activity 的百分比。在随机间隔里, Monkey 将执行一个 startActivity () 调用,作为最大程度覆盖包中全部 Activity 的一种方法。
– pct-anyevent < percent>
调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。
约束限制
-p < allowed-package-name>
如果用此参数指定了一个或几个包, Monkey 将只允许系统启动这些包里的 Activity 。如果你的应用程序还需要访问其它包里的 Activity( 如选择取一个联系人 ) ,那些包也需要在此同时指定。如果不指定任何包, Monkey 将允许系统启动全部包里的 Activity 。要指定多个包,需要使用多个 -p 选项,每个 -p 选项只能用于一个包。
-c < main-category>
如果用此参数指定了一个或几个类别, Monkey 将只允许系统启动被这些类别中的某个类别列出的 Activity 。如果不指定任何类别, Monkey 将选择下列类别中列出的 Activity : Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY 。要指定多个类别,需要使用多个 -c 选项,每个 -c 选项只能用于一个类别。
调试
– dbg-no-events
设置此选项, Monkey 将执行初始启动,进入到一个测试 Activity ,然后不会再进一步生成事件。为了得到最佳结果,把它与 -v 、一个或几个包约束、以及一个保持 Monkey 运行 30 秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。
– hprof
设置此选项,将在 Monkey 事件序列之前和之后立即生成 profiling 报告。这将会在 data/misc 中生成大文件 (~5Mb) ,所以要小心使用它。
– ignore-crashes
通常,当应用程序崩溃或发生任何失控异常时, Monkey 将停止运行。如果设置此选项, Monkey 将继续向系统发送事件,直到计数完成。
– ignore-timeouts
通常,当应用程序发生任何超时错误 ( 如“ Application Not Responding ” 对话框 ) 时, Monkey 将停止运行。如果设置此选项, Monkey 将继续向系统发送事件,直到计数完成。
– ignore-security-exceptions
通常,当应用程序发生许可错误 ( 如启动一个需要某些许可的 Activity) 时, Monkey 将停止运行。如果设置了此选项, Monkey 将继续向系统发送事件,直到计数完成。
– kill-process-after-error
通常,当 Monkey 由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的 ( 成功的 ) 结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。
– monitor-native-crashes
监视并报告 Android 系统中本地代码的崩溃事件。如果设置了 – kill-process-after-error ,系统将停止运行。
– wait-dbg
停止执行中的 Monkey ,直到有调试器和它相连接。

本篇为Android测试教程结束篇

    推荐阅读