zoukankan      html  css  js  c++  java
  • [Android 测试] 压力稳定性测试之: Monkey 详解分析脚本(转载)

    一、什么是稳定性测试?

    通过随机点击屏幕一段时间,看看app会不会奔溃,能不能维持正常运行。

    二. Money是什么?

    Monkey测试Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行测试,检测程序多久的时间会发生异常。和MonkeyRunner几乎是完全不同的,MonkeyRunner相当于是搞自动化测试的了

    官方介绍: 
    https://developer.android.com/studio/test/monkey.html

    三. Monkey的介绍

    • Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar
    • Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey
    • Monkey 命令启动方式 
      a. 可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试 
      b. 在PC上adb shell 进入Android系统,通过执行monkey {+命令参数} 来进行Monkey 测试 
      c. 在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

    这里写图片描述

    四. Monkey架构

    这里写图片描述

    五. Monkey弱点

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

    六. Monkey的压力测试参数

    这里写图片描述

    • -v 
      用于指定反馈信息级别(信息级别就是日志的详细程度)总共分3个级别,分别对应的参数如下表所示: 
      Level 0 : adb shell monkey -p fishjoy.control.menu -v 100 
      Level 1 : adb shell monkey -p fishjoy.control.menu -v -v 100 
      Level 2: adb shell monkey -p fishjoy.control.menu -v -v -v 100
    • -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 。多个包,加多个-p参数。 
      指定一个包: adb shell monkey -p com.tpnet.hlquery 100 
      指定多个包: adb shell monkey -p com.tpnet.hlquery –p com.htc.pdfreader 100

    例子:

    adb shell monkey -p com.tpnet.hlquery --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:monkeytest.txt
    • 1
    • 1

    测试com.tpnet.hlquery这个app,间隔100毫秒,50%的触摸事件,50% 
    的滑动事件,三个-v输出详细的日志,执行1000个事件,日志输出到c:monkeytest.txt

    ps: 命令运行前手机先解锁,win8 以上要用管理员身份打开cmd

    七. Monkey的结果于分析

    1. Monkey测试出现错误之后,一般的分析步骤分为以下几种: 
      看Monkey日志(注意第一个switch以及异常信息等) 
      1. 程序无响应问题,在日志中搜索 “ANR”
      2. 奔溃问题: 在日志中搜索 “Exception”
    2. 查看Monkey里面错误前的一些事件动作,并手动执行该动作。

    如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间; // Monkey finished代表执行完成。 
    Monkey执行中断,在log的最后也能查看到当前的已经执行的次数。

    八. Monkey测试中内存问题分析

    1. 怎么样去确定内存泄漏?

    1. 内存泄漏弹出out of memory对话框
    2. 对于有内存泄漏但是没有单出out of memory对话框的情况,可以通过logcat文件GC出信息,(GC:java的垃圾回收机制)
        GC_FOR_ALLOC: 因为在分配内存时候内存不够引起的
        GC_EXPLICIT 表明GC被显式请求触发的,如System.gc调用,
        GC_CONCCURRENT: 表明GC在内存使用率达到一定的警戒值时候,自动触发
        GC_BEFORE_OOM 表明在虚拟机抛出内存不够异常oom之前,执行最后一次回收内存垃圾
    

    九. –hprof 参数报告

    adb shell monkey -p com.tpnet.hlquery --hprof --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:monkeytest.txt
    • 1
    • 1

    如果指定了这个选项,monkey会在发送事件的前后生成app内存快照文件,一般会在设备的/dada/misc目录下生成hprof文件(ps: /data/misc/需要root权限)

    拖进AndroidStudio即可查看

    (ps: 我测试了没有生成。。不知道什么回事)

    十. Monkey Script脚本制作

    Monkey script是按照一定语法规则编写有序的用户事件流并且适用于monkey命令工具的脚本,可以用txt写。

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

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

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

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

    一些脚本命令:

    • 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 只识别英文和数字输入

    转载链接:http://blog.csdn.net/niubitianping/article/details/52785573
  • 相关阅读:
    一线架构师实践指南阅读体会_需求之于架构
    Multi-modal Sentence Summarization with Modality Attention and Image Filtering 论文笔记
    开始用PyTorch
    【微软大法好】VS Tools for AI全攻略(4)——选择适合自己的虚拟机
    【零基础】【Fungus首个中文教程】10分钟快速构建Unity中的万能对话系统 / 叙事系统 / 剧情系统
    Unity使用脚本进行批量动态加载贴图
    【转】Python处理wave文件
    让linux远程主机在后台运行脚本
    【bug清除】新Surface Pro使用OneNote出现毛刺现象的解决方案
    【bug清除】Surface Pro系列使用Drawboard PDF出现手写偏移、卡顿、延迟现象的解决方式
  • 原文地址:https://www.cnblogs.com/xiaoyaowuming/p/6542015.html
Copyright © 2011-2022 走看看