一、什么是稳定性测试?

通过随机点击屏幕一段时间,看看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

[Android 测试] 压力稳定性测试之: Monkey 详解分析脚本(转载)的更多相关文章

  1. APP压力稳定性测试之monkey入门

    1.什么是monkey? Monkey是一个命令行工具,使用安卓调试桥(adb)来运行它,模拟用户触摸屏幕.滑动Trackball.按键等随机事件流来对设备上的程序进行压力测试,检测程序多久的时间会发 ...

  2. App压力稳定性测试之Monkey

    一.Monkey简介 Android系统自带monkey程序,模拟用户触摸屏幕.滑动Trackball.按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常. Monkey的使用是在产 ...

  3. APP压力稳定性测试之monkey环境搭建

    一.搭建adb环境: 需要的安装软件包可以使用我分享的,链接:https://pan.baidu.com/s/13DThDtc0GALabTakshcLfg 密码:0kuo:也可以自己百度下载 1)下 ...

  4. iOS 单元测试之XCTest详解(一)

    iOS 单元测试之XCTest详解(一) http://blog.csdn.net/hello_hwc/article/details/46671053 原创blog,转载请注明出处 blog.csd ...

  5. Android 之窗口小部件详解(三)  部分转载

    原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...

  6. Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...

  7. Android 多线程之IntentService 完全详解

    关联文章: Android 多线程之HandlerThread 完全详解 Android 多线程之IntentService 完全详解 android多线程-AsyncTask之工作原理深入解析(上) ...

  8. Java基础学习总结(24)——Java单元测试之JUnit4详解

    Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before  ...

  9. Android EventBus 3.0 实例使用详解

    EventBus的使用和原理在网上有很多的博客了,其中泓洋大哥和启舰写的非常非常棒,我也是跟着他们的博客学会的EventBus,因为是第一次接触并使用EventBus,所以我写的更多是如何使用,源码解 ...

随机推荐

  1. SpiderMonkey 入门学习(一)

    spidermonkey 源码下载:http://ftp.mozilla.org/pub/mozilla.org/js/ 测试系统 Ubuntu 12.04, js 1.7.0, js 解压在/opt ...

  2. 2.Python基础认识(格式化输出,while语句,运算符,编码,单位转化)

    Python基础认识 1.字符串的格式化初识及占位符的简单应用 字符串的格式化 按照既定的要求进行有规定排版的一种输出方式. #我们想要输出的格式如下: ----------------------- ...

  3. MyBatis逆向工程中domainObjectRenamingRule报错或无效

    使用domainObjectRenamingRule报错 在使用MyBatis逆向工程时报错如下: org.mybatis.generator.exception.XMLParserException ...

  4. ios 常用库

    SwiftHTTP       网络请求库 SwiftyJSON     json解析库 SnapKit          自动布局库 Kingfisher      图像加载库 WRCycleScr ...

  5. JS面向对象方法(一): 使用原生JS 实现导航栏下多级分类弹出效果

    利用二级菜单的onmouseover/out事件 重新构建一级菜单 ".hover" 样式类 代码如下: CSS部分: 在原来的目标:hover样式中 增加 .hover状态 li ...

  6. 洛谷P1896||bzoj1087 [SCOI2005]互不侵犯

    bzoj1087 洛谷P1896 想了很久,太久没做状压都已经不会了... 状压每一行就好了 #include<cstdio> #include<algorithm> #inc ...

  7. python入门之lambda表达式、内置函数

    lambda 简单的函数就可以用lambda表达式 格式: abc = lambda a1,a2:a1+a2 其中,传参是a1和a2,返回值是a1+a2 内置函数 abs(a) #取绝对值 all(a ...

  8. 接口测试02 - 无法绕过的json解析

    概述: 先瞧一下什么是json.JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式. 它基于ECMAScript(w3c定制的js规范)的一个子集 ...

  9. 091 Decode Ways 解码方法

    包含 A-Z 的字母的消息通过以下规则编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个包含数字的编码消息,请确定解码方法的总数.例如,给定消息为 "1 ...

  10. simhash与重复信息识别

    在工作学习中,我往往感叹数学奇迹般的解决一些貌似不可能完成的任务,并且十分希望将这种喜悦分享给大家,就好比说:“老婆,出来看上帝”…… 随着信息爆炸时代的来临,互联网上充斥着着大量的近重复信息,有效地 ...