一: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作为一个像待测应用发送 随机按键消息的测试工具。验证待测应用在这些随机性的输入面前是否会闪退或者崩溃)


【自动化测试】Android Monkey实践_第1张图片

四: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事件分发
  2. Android adb shell后面可用的常用命令详细列举
  3. 【笔记】android捕获触摸事件
  4. android 同一个TextView不同文字的点击事件
  5. Android事件传递机制
  6. Android studio实现按钮的点击事件
  7. Android 终端命令安装 apk 应用程序
  8. Android中点击事件之FocusChangedListener实现步骤

随机推荐

  1. 对Android的理解
  2. Android(安卓)判断SIM卡属于哪个移动运营
  3. Android的按钮监听事件&自定义回调函数
  4. Android从开机到打开第一个应用发生了什
  5. Android ListView分页载入(服务端+android
  6. android 简单的画图操作
  7. Android入门第十六篇之Style与Theme[转]
  8. “分裂”的 Android 再引争议
  9. Android(安卓)系统应用调用,intent的使用
  10. Android平台上的11个感应器你都知道吗