zoukankan      html  css  js  c++  java
  • Monkey测试

    一、Monkey是什么?

    Monkey是Android中的一个命令行工具,可以运行在模拟器或者实际设备中
    向系统发送伪随机的用户事件流(按键输入、触摸屏输入、手势输入等)
    实现对正在开发的应用程序进行测试
    Monkey测试之一种为了测试软件的稳定性、健壮性的快速有效的方式

    二、Monkey用来做什么的?

     Monkey 主要用于Android的稳定性测试,自动的一个压力测试小工具, 主要目的就是为了测试app 是否会Crash(崩溃).

    三、Monkey的特征

    1.测试对象仅为应用程序包,有一定的局限性(不能对源码进行测试)
    2.Monkey测试使用的事件流数据是随机的,不能进行自定义
    3.可以对MonkeyTest对象,事件数量,类型、频率等进行设置

    四、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测试的目的

    1.ANR问题:在日志中搜索“ANR”
    2.崩溃的问题:在日志中搜索“Exception”
    3.ANR:Application Not Responding,在Android中,如果应该程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”应用。 好的程序应该能流畅运行,不能出现ANR问题

    六、Monkey命令、基本参数介绍

    1:使用monkey测试手机所有程序 adb shell monkey 100 # 执行monkey测试100次

     

     2:指定一个或多个包 adb shell monkey -p 包名 100 # 指定包之后,monkey将只允许系统启动指定的app。如果不指定包, monkey将允许系统启动设备中的所有app。

     

     3:显示日志详细程度

    用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下 表所示:

    Level 0: adb shell monkey -p 包名 -v 30 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

     

    Level 1:adb shell monkey -p 包名 -v -v 30 // 提供较为详细的日志,包括每个发送到Activity的事件信息

     

    Level 2:adb shell monkey -p 包名 -v -v -v 30 // 最详细的日志,包括了测试中选中/未选中的Activity信息

     

     4:将log信息写到文档中 adb shell monkey 100 >路径

    #### 正常情况, 如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成

    5:随机数种子 adb shell monkey –s 10 100

    -s 指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。

    6:用户操作延时 adb shell monkey -p com.example.login --throttle 300 100

    --throttle <毫秒>    指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的 生成和发送消息。
    # 注:一般设置为300毫秒,原因是实际用户操作的最快300毫秒左右一个动作事件。

    7:触摸事件 adb shell monkey --pct-touch 67 -v 10

    --pct-touch <percent>     调整触摸事件的百分比。(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)
    –pct-touch:触摸事件。即在某一位置的Down-Up(手指的放下和抬起)事件。Down(ACTION_DOWN)和Up(ACTION_UP)的坐标临近,但并非相同。

    8:调整手势事件 adb shell monkey --pct-motion 67 -v 10

    --pct-motion <percent>    调整手势事件motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)
    –pct-motion:动作事件。以Down(ACTION_DOWN)开始,Up(ACTION_UP)结尾,中间至少有一次Move(ACTION_MOVE)。

    Event percentages:
    0:--pct-touch//touch
    events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件)
    1:--pct-motion//motion
    events percentage手势事件百分比(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯
    2:--pct-pinchzoom//pinch
    zoom events percentage二指缩放百分比,即智能机上的放大缩小手势操作
    3:--pct-trackball//trackball  即单纯的Move(ACTION_MOVE)
    events percentage轨迹球事件百分比(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样)
    4:--pct-rotation//screen
    rotation events percentage屏幕旋转百分比,横屏竖屏
    5:--pct-nav//nav 基本导航事件。即来自于方向输入设备的上下左右操作。
    events percentage”基本”导航事件百分比(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有
    6:--pct-majornav//major 即Navigation Bar的确认,菜单,返回键等
    nav events percentage”主要”导航事件百分比(这些导航事件通常会引发UI的事件,例如5-way pad的中间键、回退键、菜单键)
    7:--pct-syskeys//system(key)
    operations percentage”系统”按钮事件百分比(这些按钮一般专供系统使用,如Home, Back, Start Call, End Call,音量控制)
    8:--pct-appswitch//app
    switch events percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
    9:--pct-flip//keyboard
    flip percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
    10:--pct-anyevent//anyevents  该事件可能包含其他上述事件。
    percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。
    参考:https://blog.csdn.net/u011436666/article/details/53998332
    5.8. --ignore-crashes
    作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

    正常操作,不忽略异常

     忽略异常

     

    9:--ignore-timeouts(ANR) adb shell monkey --ignore-timeouts –v 10

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

    10:monkey实例: 用monkey 命令 对登录apk进行 性能测试

     

    # monkey -p 包名 -s 23  --throttle 2000 --ignore-crashes --ignore-timeouts -v -v -v 100000>/data/local/tmp/log.txt
    1.   -p后面接着的对应的包名,对具体某个app测试
    2.   -s后面是对应的种子数,好像就是操作步骤,一般设置相同的种子数目的是复现bug
    3.   --ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到carash或者timeout的情况时忽略掉,一般不设置时,出现carash或者timeout时,Monkey测试会终止。这里是防止Monkey测试终止。
    4.   -v 指的是Monkey测试时打印log级别。
    5.   100000 这里是指点击的次数,根据她们测试的经验,对于单个应用程序这个次数设置在100000次就可以了;如果是真机,一般设置在500000次。
    6. --throttle-时间 ,设置事务之间的延迟等待时间,单位是毫秒
    7.>路径,设置日志存储路径

    11:--pct-touch 50:指定具体的某个事务的占比

    adb shell monkey -p com.example.login --ignore-crashes --ignore-timeouts --throttle 100 --pct-touch 50 --pct-motion 50 -v -v 1000 >c:loginc.txt

    12:monkey异常分析

    一般我们可以一次发送5万次随机事件的请求,每个请求之间的间隔为150毫秒,测试大约会进行40min,完成以后就可以查看日志。 
    日志中可能的错误:
    1.程序异常退出,crash (ctrl+f搜索)
    2.程序强制关闭,ForceClosed (简称FC) (同上)
    3.程序无响应,ApplicationNo Response(ctrl+f搜索‘ANR ’,加空格是为了屏蔽掉一些无效信息)
    4.手动生成。
    Monkey 执行中断, 在log最后也能看到当前执行次数

     

  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/niuniu0328/p/14891190.html
Copyright © 2011-2022 走看看