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

    一、简介

    1、什么是Monkey测试?

    Monkey testing,也有人叫做搞怪测试。就是用一些稀奇古怪的操作方式去测试被测试系统,以测试系统的稳定性。Monkeytest,一般指这样的测试活动,用毫无规律的指令或操作使用被测系统,观察系统的稳定性和容错性能

    Monkey测试是Android自动化测试的一种手段,Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。当Monkey程序在模拟器或设备运行的时候,如果用户触发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件

    二、Monkey程序

    1、程序存放路径

    1Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar;   

     


    2 Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey

     


    2Monkey 命令启动方式

    1可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试          

    2PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试          

    3 Android机或者模拟器(推荐使用夜神模拟器)上直接执行monkey 命令,可以在Android机上安装Android终端模拟器  

    3Monkey架构

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

     

    4APP包名查看

    1)安装手机安装包名查看器'

     2aapt命令  aapt dump badging *.apk

    3)源码下的AndroidManifest.xml文件查看

    4adb logcat抓取当前Android机运行的app的包名(  I/ActivityManager(数字): Displayed 包名/类名: +ms )命令行输入 adb logcat >e:ag.txt

    手机操控appctrl+c停止

    e:ag.txt这个文件下搜索关键字如Displayed ,一般都能找到

    三、Monkey参数与命令

    1Monkey常用参数

     

     -v  日志详细程度

    Level 0  :  adb shell monkey  -p fishjoy.control.menu  -v 100   最简单(默认),除了启动、测试完成和最终结果外只提供较少的信息。

    Level 1  :  adb shell monkey  -p fishjoy.control.menu  -v  -v 100  提供了较为详细的测试信息,如逐个发送到Activity的事件信息

    Level 2  :  adb shell monkey  -p fishjoy.control.menu  -v  -v  -v 100 提供了更多的设置信息,如测试中选中或未选中的Activity信息

    比较常用的是-v -v -v,一般会保存到指定文件中供开发人员查找bug原因时使用

    -s(随机数种子)

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

    示例: monkey测试1:adb  shell  monkey  -p fishjoy .control.menu  –s 10  100

              monkey测试2:adb  shell  monkey  -p fishjoy .control.menu  –s 10  100

    --throttle <毫秒> 

    指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。

    示例:adb  shell monkey -p fishjoy.control.menu  --throttle 3000 100 

    -p <允许的包名列表> 

    用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果不指定包,monkey将允许系统启动设备中的所有app。 

    --ignore-security-exception 

    作用:通常,当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。 

    --ignore-timeouts

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

    --ignore-crashes

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

    --pct-touch <percent>

    作用:调整触摸事件的百分比.(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)比如一个应用80%的操作都是触摸,那就可以将此参数的百分

    比设置成相应较高的百分比。如触摸返回、触摸签到等

    --pct-motion<percent>

    调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)也就是直线滑动事件如从左到有滑动解锁

    --pct-trackball <percent>

    作用:调整滚动球事件百分比。(滚动球事件由一个或多个随机的移动事件组成,有时会伴随着点击事件)如不规则滑动解锁

    --pct-nav<percent> 导航,现在手机基本没有导航了

    ---pct-syskeys<percent> 按键消息比例,主页、后退、音量增减

    --pct-anyevent 其他不常用的按键比例的设置,不常用

    --hprof  monkey测试完成后生成内存快照,data/misc路径下生成,不常用,比较占空间

    --ignore-security-exceptions  忽略权限问题的

    --kill-process-after-error 当错误发生时杀进程

    --monitor-native-crashes 监视崩溃时的本地代码

    2、Monkey命令实例

     

    monkey -pcom.tencent.mtaexample -s 23  --throttle2000 --ignore-crashes --ignore-timeouts -v -v -v 100000>/data/local/tmp/log.txt 2>&1 &

    1.-p后面接着的对应的包名,如果是整机测试,就不需要 -ppackage_name

    2.-s:后接随机数生成器的seed值,如果使用相同的seed值再次运行monkey,将生成相同的事件序列(也就是说,重复执行刚才的随机操作)。

    3. --ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到carash或者timeout的情况时忽略掉,一般不设置时,出现carash或者timeout时,Monkey测试会终止,这里是防止Monkey测试终止。

    4.-v 指的是Monkey测试时打印log级别。

    5.100000 这里是指点击的次数,根据她们测试的经验,对于单个应用程序这个次数设置在100000次就可以了;如果是整机,一般设置在500000次。

    /data/local/tmp/log.txt测试的log记录在手机上/data/local/tmp/ 下面的log.txt里面,这个名字可以自己写。

    6.2>&1 固定的写法,这个也很重要,代表的意思是中间忽略的东西的日志一并输入到指定的文件中。

    7.最后单独的一个"&" 是一旦Monkey测试开始了,之后可以拔掉数据线,不会影响Monkey测试。

    8.测试所有模块 monkey  -s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &

    adb shell monkey -p com.lnsoft.jiankangyanglao --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000  -v -v -v 180000 1 > E:sdkloglogin.txt

    四、CrashANR专项测试测试步骤

    1安装可以引起Crash(ANR)App

    2执行压力命令

    3析取Crash(ANR)Exception信息

      案例: 执行压力测试,并且生成monkey_test.log日志文件。

      #adb shell monkey -p cn.besttest.crashtest -v 100 >E:monkeymonkey_test.log

      #查看E盘文件夹下已经生成了monkey_test.log

     

      #打开文件,进行crashANR分析

    五、Monkey日志分析

    1、正常情况

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

     

     

    2异常情况

    Monkey 测试出现错误后,一般的分析步骤
    Monkey的日志 (注意第一个swith以及异常信息等)
    a) 程序无响应的问题: 在日志中搜索 ANR
    b) 崩溃问题:在日志中搜索 “Exception”   (如果出现空指针, NullPointerException)  肯定是有bugMonkey 执行中断, 在log最后也能看到当前执行次数

    3测试结果分析

    1)、ANR问题(程序无响应):在日志中搜索“ANR"(application no response)

    2)、闪退问题:在日志中搜索"crash"

    3)、异常:搜索"exception"

    4)、强制退出:搜索"force closed"

    5)、将测试报告记录在本地:

    将命令改为adb shell monkey p android.zhibo8 -throttle 100 -pct-touch 50 -pct-motion 50 v v 10 >c:monkeylog.txt Monkey运行结束后,会在指定目录下生成指定文件。

    (6)Event percentage分析:

    Event percentage分析:

    在上述过程中,使用了percent相关命令控制了事件类型,如果我们不指定事件类型。生成的报告中,事件占比大致如下:

    // Event percentages:    事件:

    // 0: 15.0%            0:触摸事件百分比,即参数--pct-touch

    // 1: 10.0%            1:滑动事件百分比,即参数--pct-motion

    // 2: 2.0%              2:缩放事件百分比,即参数--pct-pinchzoom

    // 3: 15.0%             3:轨迹球事件百分比,即参数--pct-trackball

    // 4: -0.0%              4:屏幕旋转事件百分比

    // 5: 25.0%              5:基本导航事件百分比,即参数--pct-nav

    // 6: 15.0%              6:主要导航事件百分比,即参数--pct-majornav

    // 7: 2.0%               7:系统事件百分比,即参数--pct-syskeys

    // 8: 2.0%               8Activity启动事件百分比,即参数--pct-appswitch

    // 9: 1.0%               9:键盘翻转事件百分比,即参数--pct-flip

    // 10: 13.0%            10:其他事件百分比,即参数--pct-anyevent

    更为具体的类型信息,可以查看查看Monkey源码中的MonkeySourceRandom.java文件。

  • 相关阅读:
    [Effective C++ --009]确定对象被使用前已先被初始化
    [Effective C++ --008]别让异常逃离析构函数
    [Effective C++ --007]为多态基类声明virtual析构函数
    [Effective C++ --006]若不能使用编译器自动生成的函数,就该明确拒绝
    [Effective C++ --005]了解C++默默编写并调用哪些函数
    [000]socket通信--server和client实现的简单例子
    [014]模板-模板实参推导
    [013]模板-非类型模板参数
    [012]泛型--lambda表达式捕获
    U3d keyCode值对应的按键
  • 原文地址:https://www.cnblogs.com/daisy-fang/p/12848496.html
Copyright © 2011-2022 走看看