zoukankan      html  css  js  c++  java
  • Android Monkey压力测试介绍

    Monkey 是Android SDK提供的一个命令行工具, 可以简单、方便地运行在任何版本的Android模拟器和实体设备上,Monkey会发送伪随机的用户事件流,适合对app做压力测试

    一、环境搭建

    安装Android SDK并配置环境变量,下载adt-bundle-windows-x86_64-20140702.zip安装包,根据自己的系统下载64或32位的adt,下载好后进行解压,自己放到一个目录中,打开解压后的文件夹后发现里面有如下文件或文件夹,如图:

    eclipse:这是ADT的压缩包自带的Eclipse,支持Android开发,不需要在配置,不过现在建议大家使用Android Studio

    sdk:这是Android的SDK,我们配置环境变量就配置到这里

    SDK Manager:用来管理SDK 更新和下载的一个管理器

    接下来我们就来配置环境变量:

    ANDROID_HOME这个环境变量指定要sdk这个文件夹,例如:ANDROID_HOME=D:softwareadt-bundle-windows-x86_64-20140702sdk

    PATH环境变量上增加如下值:

    PATH=%ANDROID_HOME% ools;%ANDROID_HOME%platform-tools;%ANDROID_HOME%uild-toolsandroid-4.4.2;

    配置好环境变量后,重新打开cmd,执行adb version,出现如下图所示代表配置正确

    启动安卓模拟器或安卓手机,在cmd中输入adb devices,出现device证明成功

    二、什么是Monkey

    顾名思义,Monkey就是猴子,  Monkey测试,就像一只猴子, 在电脑面前乱敲键盘在测试,猴子什么都不懂, 只知道乱敲,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常

     

    三、Monkey 用来做什么

    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虽然可以根据一个指定的命令脚本发送按键消息,但其不支持条件判断,也不支持读取待测界面的信息来执行验证操作

    七、Monkey 参数大全

    八、Monkey命令基本参数介绍

    1、标准的monkey命令

         例如:adb shell monkey -v 500

                   产生500次随机事件

    2、四大类选项:常用选项、事件选项、约束选项、调试选项

         2.1 常用选项          

                --help 打印帮助信息
               -v 指定打印信息的详细级别,一个-v增加一个级别,默认级别为0,总共分3个级别,分别对应的参数如下表所示: 
                    Level 0 : adb shell monkey -p com.shjt.map -v 100 # 缺省值,仅提供启动提示、测试完成和最终结果等少量信息 
                    Level 1 : adb shell monkey -p com.shjt.map -v -v 100 # 提供较为详细的日志,包括每个发送到Activity的事件信息
                    Level 2 : adb shell monkey -p com.shjt.map -v -v -v 100 # 最详细的日志,包括了测试中选中/未选中的Activity信息

         2.2 事件选项

                -s 指定产生随机事件种子值,相同的种子植产生相同的事件序列,实例:
                    monkey测试1:adb shell monkey -p com.shjt.map –s 10 100
                    monkey测试2:adb shell monkey -p com.shjt.map –s 10 100             

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

                   示例:adb shell monkey -p com.shjt.map --throttle 3000 100

               --pct-touch 指定触摸事件的百分比

               --pct-motion 指定滑动事件的百分比

               --pct-trackball 指定轨迹球事件的百分比

               --pct-nav 指定导航事件的百分比(up/down/left/right)

               --pct-majornav 指定主要导航事件的百分比(back key、menu key)

               --pct-syskeys 指定系统按键事件的百分比(Home、Back、startCall、endCall、volumeControl)

               --pct-appswitch 指定activity之间的切换的百分比

               --pct-anyevent 指定任意事件的百分比

         2.3 约束选项

               -p 指定有效的package,如果不指定包, 则对系统中所有package有效

                     指定一个包:adb shell monkey -p com.shjt.map 100   

                     指定多个包:adb shell monkey -p fishjoy.control.menu  –p com.shjt.map  100

               -c activity必须至少包含一个指定的category,才能被启动,否则启动不了

         2.4 调试选项

               --dbg-no-events 初始化启动的activity,但是不产生任何事件

               --hprof 指定该项后在事件序列发送前后会立即生成分析报告

               --ignore-crashes 忽略崩溃

               --ignore-timeouts 忽略超时

               --ignore-security-exceptions 忽略安全异常

               --kill-process-after-error 发生错误后直接杀掉进程

               --monitor-native-crashes 跟踪本地方法的崩溃问题

               --wait-dbg 知道连接了调试器才执行的monkey测试

    九、Monkey 实例

    用monkey命令对上海公交app进行性能测试

    adb shell monkey –p com.shjt.map –-throttle 100 –-pct-touch 70 –-pct-motion 30 –v –v 1000 > c:monkey.txt

    --pct-touch 70 --pct-motion 30,一个代表点击,一个代表滑动,两个加起来是100,执行1000次,代表不会进行其他事件操作,如轨迹事件(--pct-trackball),导航事件(--pct-nav)等等,指定这两种操作后,就极大的降低了monkey点到被测app外面的概率(触发到音量键等系统按键)

    adb shell monkey –p com.shjt.map –s 100 --ignore-crashes --ignore-timeouts --monitor-native-crashes –v –v 1000 > monkey.log

    十、Monkey 查看包名

    手机中安装apk包名查看器,aapt命令查看

    十一、Monkey  日志分析

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

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

    十二、必须重视Crash

    虽然Monkey测试有部分缺陷,我们无法准确地得知重现步骤, Monkey测试所出现的NullPointException,都是可以在用户使用时出现的, 何时出现只是时间问题,理论上来说,Monkey所有的Crash都需要在发布前修复掉

    十三、monkey运行脚本

    脚本执行命令:

    monkey -f <filename> count,例如monkey -f monkey.script 1

  • 相关阅读:
    Vue2.0 $set()的正确使用方式
    Vue中axios踩坑之路-POST传参
    vue里使用create、mounted调用方法的正确姿势
    cmd返回上一级和根目录
    【积累】排序题积累
    【图论】2019 ICPC Malaysia National G(拓扑排序)
    2019 ICPC Malaysia National F(状态压缩)
    【线段树】扫描线学习笔记
    组合数(阶乘数质因子分解)
    【线段树】2019CCPC网络选拔赛 array(权值线段树)
  • 原文地址:https://www.cnblogs.com/laosun0204/p/11345683.html
Copyright © 2011-2022 走看看