一:Monkey作用 通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常 Monkey 主要用于Android 的压力测试  自动的一个压力测试小工具, 主要目的就是为了测试app 是否会Crash.
二:Monkey介绍 1.Monkey程序由Android系统自带,使用Java诧言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar; 2. Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey; 3. Monkey 命令启动方式:     a)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试    b)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试        c )  在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器
三:Monkey架构图

Monkey 运行在设备或模拟器上面,可以脱离PC运行(普遍做法是将monkey作为一个像待测应用发送 随机按键消息的测试工具。验证待测应用在这些随机性的输入面前是否会闪退或者崩溃)




四:Monkey弱点 Monkey虽然可以根据一个指定的命令脚本发送按键消息,但其不支持条件判断,也不支持读取待测界 面的信息来执行验证操作。
五:环境搭建 1.模拟器准备好root(开发者模式) 2.adb 路径配置到系统环境变量path里面(D:\Jack_ESong\AndroidSDK\Sdk\platform-tools) 3.adb shell 可以进入模拟器(如果有adb.exe 与当前模拟器版本不匹配情况,直接将本地的adb.exe 复制一份到模拟器安装目录上面,将模拟器的安装目录配置到系统变量path里面,重新打开AS 和模拟器)
六:参数大全
参数介绍 adb shell monkey –help
-p <允许的包名列表>          用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果不指定包, monkey将允许系统启动设备中的所有app。   指定一个包:adb shell monkey -p com.clt.naton    指定多个包:adb shell monkey -p fishjoy.control.menu  –p com.clt.naton   100  
-v         用亍指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下 表所示:  Level 0  :  adb shell monkey -p com.clt.naton -v 100               // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息    Level 1  :  adb shell monkey -p com.clt.naton -v  -v 100          // 提供较为详细的日志,包括每个发送到Activity的事件信息 Level 2  :  adb shell monkey -p com.clt.naton -v  -v  -v 100     // 最详细的日志,包括了测试中选中/未选中的Activity信息
-s(随机数种子)             用亍指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。  示例: monkey测试1:adb shell monkey -p com.clt.naton –s 10 100                 monkey测试2:adb shell monkey -p com.clt.naton –s 10 100
--throttle <毫秒>             用亍指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的 生成和发送消息。 示 例:adb shell monkey -p com.clt.naton --throttle 3000 100   
--pct-touch 
作用:调整触摸事件的百分比。(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)
例: adb shell monkey –pct-touch 100 -v 10
注:常用参数,此参数设置要适应当前被测应用程序的操作,比如一个应用80%的操作都是触摸,那就可以将此参数的百分比设置成相应较高的百分比。 --pct-motion 
作用:调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)
例: adb shell monkey –pct-motion 100 -v 10
注:常用参数,需注意的是移动事件是直线滑动,下面的trackball移动包含曲线移动。

--ignore-crashes
作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

--ignore-timeouts
作用:事件请求超时会影响monkey的测试。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

保存测试日志其实很简单,命令如下: adb shell monkey -p com.clt.naton -v -v -v 500 > monkeytest.txt
七:monkey测试实例 命令: adb devices :查看当前正在连接的设备
adb shell :进入调试模式(adb shell monkey -p com.clt.naton -v 100 >D:\monkey.txt ) ps  : 查看正在执行的包名(将crm项目运行起来,通过ps就可以看到包名)
(跑monkey的时候或者想抓程序log导出时,有时会提示:cannot create D:monkeytest.txt: read-only file system 为什么有时候可以有时候不可以? 后来发现跟使用使用习惯不一样,一会是先进入adb shell 再用命令,一会是直接命令进入。 进入adb shell后再用命令就会失败~ 正确方法:退出shell或者执行命令时先不要进shell C:\Documents and Settings\Administrator>adb shell monkey -p 包名  -v 300  >e:\text.txt 进入adb shell后就相当于进入linux的root下面,没有权限在里面创建文件~)
adb shell monkey -p com.clt.naton -v 100 >D:\monkey.txt    表示打开crm项目 随机执行100次 输出目录到d盘下面的monkey.txt文件下面

查看结果


adb shell monkey –p com.clt.naton –-throttle  1000 --pct-touch 50 –-pct-motion  50 –v –v  1000 >D:\monkey.txt

八:日志分析
正常情况,  如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成\ 异常情况 Monkey 测试出现错误后,一般的分析步骤
看Monkey的日志 (注意第一个swith以及异常信息等)
1. 程序无响应的问题: 在日志中搜索 “ANR” 2. 崩溃问题:在日志中搜索 “Exception”   (如果出现空指针, NullPointerException)  肯定是有bug Monkey 执行中断, 在log最后也能看到当前执行次数

九:代码执行过程中的CRASH  ANR

CRASH即崩溃信息,程序在运行中非正常退出。 不设置忽略crashes,在测试过程中出现CRASH,会中断测试,并显示CRASH信息和seed信息

根据seed值来完成bug的复现:adb shell monkey -p com.feicuiedu.monkeytestdemo -s 1476474162566 -v 1000
adb shell monkey -p com.clt.naton -s 1499654233911 -v 1000

ANR

Applicaton Not Responsing.

同样在monkey测试过程中,如果出现ANR现象,会输出相应的信息,以ANR开头,获取到信息进行问题的解决,同样可以通过seed来进行复现。

附:如果在手动测试过程中出现ANR,日志信息出现在手机中:

  1. adb shell
  2. cd /data/anr 切换到设备路径下
  3. ls 可以看到traces.txt 里面即为log信息


一次随机的自动化Monkey测试完成。
十:停止执行Monkey命令 cmd在打开一个命令行窗口

输入:

adb shell ps | grep monkey

返回来的第一个数字,即是monkey的进程号

2.kill 命令结束进程继续输入:

adb shell kill [刚才查到的进程号] 同理结束其他进程,和其他应用也可用此法。

十一:执行 Monkey Script 脚本

脚本编写完毕放入手机的sdcard目录下,cmd中运行命令

adb shell monkey -f/sdcard/脚本名字 运行次数

结合monkey的-v和–hhprof输出日志和性能报告

adb shell monkey --hprof -f/sdcard/*.txt -v -v -v 3 > c:\monkey.txt

一些脚本命令:

  • start data>>
    将控制 monkey 的一些参数设置和具体的 monkey 命令分隔开来

  • LaunchAcitivity(pkg_name, cl_name)
    启动任意应用的一个活动(界面)
    pkg_name, 要启动的应用包名
    cl_name, 要打开的活动的类名

  • DispatchPointer(downTime,eventTime,action,x,y,pressure,size,metaState,xPrecision,yPrecision,device,edgeFlags)
    向一个指定位置发送单个手势消息
    downTime: 发送消息的时间,只要是合法的长整型数字即可
    eventTime: 主要是用在指定发送两个事件之间的停顿
    action: 消息是按下还是抬起,0表示按下,1表示抬起
    x:x 坐标
    y:y 坐标
    其余 7 个参数均可以设置为 0

模版

count = 1  // 下面这个 count 选项, monkey 并没有用到,可以忽略它 
speed = 1.0    //speed  选项是用来调整两次按键的发送濒率的 
start data >>   // “start data >>” 是 有 大小写敏感的,而且单词间的间隔只用有一个空格!
LaunchActivity(com.zhengping.contact, com.zhengping.contact.Main)   //# Activity 值可以通过 aapt 命令查看
DispatchPointer(5109520,5109520,0,261,128,0,0,0,0,0,0,0);
DispatchPointer(5109521,5109521,1,261,128,0,0,0,0,0,0,0);
UserWait(2000)  // 停顿时间
DispatchPress (KEYCODE_Z)  // 文字输入 monkey 只识别英文和数字输入





更多相关文章

  1. android XML解析技术
  2. 开源项目之Android框架(Query)
  3. 更简单的学习Android事件分发
  4. 【Android】实现XML解析的几种技术
  5. 如何开发Android(安卓)Maps
  6. Android(安卓)adb不是内部或外部命令 问题解决
  7. Android(安卓)adb的使用略解
  8. Android中解析XML
  9. Android桌面小部件AppWidget(1)

随机推荐

  1. [置顶] android 多媒体和相机详解三
  2. sms AT指令返回错误代码: CMS errors & CM
  3. Android(安卓)应用中十大导航设计错误
  4. Android(安卓)内功心法(1.4)——android
  5. [置顶] Android(安卓)Studio Lint 自动检
  6. Android和java平台 DES加密解密互通程序
  7. android 的 sp 智能指针用法介绍 sp wp
  8. Android(安卓)修图(换证件照背景,污点修复)
  9. Anroid ListView分组和悬浮Header实现
  10. Android学习札记21:Android中App工程结构