一、什么是稳定性测试?

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

1.下载AndroidSDK环境和环境变量(需要先安装java环境)
配置环境教程:https://www.jianshu.com/p/c3e1fe6f61c4
安卓设备(真机/模拟器)
2.连接设备
手机打开USB调试模式
cmd命令行输入 adb devices


这样显示则是连接成功了
连接信息解释:
手机设备:显示设备的序列号,如图的b2355f8a
模拟器:显示ip地址和端口,如127.0.0.1:8888
device:已识别的设备,连接成功(这种情况即连接成功)
unauthorized:没有授权,需要手机上授权后才能链接(手机授权一下解决)
unkown:未识别的设备(电脑按照驱动)
offine:离线设备(设备和电脑断开连接了)
(原文链接:https://blog.csdn.net/m0_48450657/article/details/116140930)

六、Monkey弱点

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

七. Monkey的压力测试参数

这个option通常又分为4大类:常用选项,事件选项,约束选项,调试选项

1.常用选项的参数通常有:

-v  用于反馈信息级别(一个-v表示一个层级,两个-v表示两个层级,通常最多三个-v)

示例Level0:adb shell monkey -p com.swartz.cicada –v 100

说明 缺省值,仅提供启动提示、测试完成和最终结果等少量信息 相应源代码如图所示了,这十分有利于调试了

示例Level1:adb shell monkey -p com.swartz.cicada -v-v 100

说明:提供较为详细的日志,包括每个发送到Activity的事件信息

示例Level2:adb shell monkey -p com.swartz.cicada -v-v-v 100

说明:最详细的日志,包括了测试中选中/未选中的Activity信息

2.时间选项的参数通常有:

-s 表示伪随机数生成的seed值,如果seed值相同,则两次monkey所产生的事件序列也是一样的

示例:

Monkey测试1:adb shell monkey -p com.swartz.cicada –s 10 100

Monkey 测试2:adb shell monkey -p com.swartz.cicada –s 10 100

两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;

--throttle:每个事件结束后的间隔时间

3.约束选项的参数通常有:

-p 指定文件名

count 指定要发送的事件数

-c 用此参数指定一个或几个类别,activity必须指定一个category,才能被启动,否则将会启动不了

4.调试选项的参数通常有:

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

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

--ignore-crashes:忽略崩溃

--ignore-timeouts:忽略超时

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

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

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

工作中为了保证测试数量的完整进行,我们一般不会在发生错误时立刻退出压力测试。monkey 测试命令如下:

adb shell monkey -p com.swartz.cicada -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 10000 > E:\monkey_log\20170831.txt

kill 此参数用来杀掉进程:kill pid  先执行adb shell  再ps |grep monkey 查询结果如下图中15248 即为PID  再kill pid(15248)即可

例子:

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

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

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

八. Monkey的结果于分析

1. 初步分析方法:

seed=20 count=100  --随机种子和运行次数

AllowPackage: com.swartz.cicada  --指定的测试包
:IncludeCategory: android.intent.category.LAUNCHER  --Category包含LAUNCHER
:IncludeCategory: android.intent.category.MONKEY   --Category包含MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
//   + Using main activity com.swartz.cicada.LauncherActivity (from package com.swartz.cicada)
// Selecting main activities from category android.intent.category.MONKEY  --查询结果列表
// Seeded: 20 --随机种子
// Event percentages:
//   0: 15.0%  --事件0 为touch事件,就是相当于按下之后弹起来的一个动作
//   1: 10.0%  --事件1 为motion,相当于说从起始点到终点有移动了多少步,就是步骤数量 
//   2: 2.0%   --事件2 为pinchzoom,为两个手指有同时按下去后,都向中间移动后up起来,相当于一个缩放的动作。
//   3: 15.0%  --事件3 为trackball,为轨迹球事件 
//   4: -0.0%  --事件4 为rotation 为屏幕旋转百分比隐藏事件
//   5: 25.0%  --事件5 为nav导航事件,就是上下左右
//   6: 15.0%  --事件6 为majornav主导航事件,会产生一些窗口的事件
//   7: 2.0%   --事件7 为系统按键
//   8: 2.0%   --事件8,app应用的打开就是用的这个事件
//   9: 1.0%   --事件9,键盘的开,关

//   10: 13.0% --事件10,按键按下在弹起等动作

日志结尾:

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

(如果Monkey执行中断,在log的最后也能查看到当前已执行的次数。)

2.详细分析:

Monkey测试出现错误之后,一般的分析步骤分为以下几种:

(1)看Monkey日志(注意第一个switch以及异常信息等)

(2)程序无响应问题,在日志中搜索 “ANR”

(3)奔溃问题: 在日志中搜索 “Exception”

ANR问题:在日志中搜索“ANR”(什么是ANR:Application Not Responding,即应用无响应,具体有关ANR的知识详见:):https://www.tuicool.com/articles/IfQvY3

(4)ForceClosed和程序异常退出问题:在日志中搜索“致命”

3.查看Monkey里面错误前的一些事件动作,并手动执行该动作。

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

Monkey执行中断,在log的最后也能查看到当前的已经执行的次数。

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

怎么判断内存泄漏?

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之前,执行最后一次回收内存垃圾

十. Monkey Script脚本制作

Monkey script是按照一定语法规则编写有序的用户事件流并且适用于monkey命令工具的脚本,可以用txt写。脚本编写完毕放入手机的sdcard目录下,cmd中运行命令

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

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

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

一些脚本命令:

  • 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

monkey稳定性测试详细介绍相关推荐

  1. 关于Monkey稳定性测试,这是我看到最详细的文章

    通过随机点击屏幕一段时间,看看app会不会崩溃,能不能维持正常运行,这就是稳定性测试. 01.Monkey是什么 Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户 ...

  2. Monkey稳定性测试初探(二)

    记得 关注转发~~~ 之前写过一篇关于稳定性测试的文章: Monkey随机性能压测初探(一) 01 什么是稳定性测试 稳定性测试,是在一定压力的情况下,对系统或某个模块持续进行长时间的操作(一般遵循7 ...

  3. 一文彻底搞懂App的Monkey稳定性测试

    01.什么是稳定性测试 通过随机点击屏幕一段时间,看看app会不会崩溃,能不能维持正常运行 02.Money是什么 Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用 ...

  4. monkey稳定性测试

    稳定性测试定义:是指软件长时间的持续运行,系统版本是否稳定,是否持续的为客户提供服务. 指标:异常的次数,异常的频率 稳定性如何实施? 使用monkey向系统发送随机的用户事件流,实现对正在开发的应用 ...

  5. Android客户端Monkey稳定性测试

    目录 Monkey优缺点 优点 缺点 Monkey命令 参数详解 日志分析 日常测试过程中,为了测试APP的稳定性及随机场景,不按照常规用户的思维进行操作APP,可选择使用Monkey进行随机测试.. ...

  6. Monkey稳定性测试,多少还是要了解一下的(上)

    Monkey在开发中非常常见,本篇主要梳理Monkey测试相关知识点. 01 Android整机Monkey测试 Android整机测试需要忽略crash timeout security-excep ...

  7. 有趣的排序算法——Monkey King排序 详细介绍

    <关于某位小蒟蒻在机房划水没事干于是瞎搞的那档事> 前言 排序算法在题目中经常需要用到,在程序中,我们一般打的是快排,归并,堆排等高效率排序,更有甚者会直接用sort排序,而今天,我要介绍 ...

  8. Mock测试详细介绍及使用

    最近在写一个微服务的项目,项目中使用了Mock.Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开. 定义 1. ...

  9. android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试

    主要内容 稳定性测试是什么 Monkey 介绍 自动化 Monkey 稳定性测试是什么 通过随机点击屏幕一段时间,看看 app 会不会奔溃,能不能维持正常运行. Monkey 介绍 Monkey 是一 ...

最新文章

  1. Google 发布 Cloud AutoML 降低机器学习门槛,调参民工前景堪忧
  2. 数字IC设计各种仿真波形文件
  3. [JavaScript]为JS处理二进制数据提供可能性的WEB API
  4. Python defaultdict 模块和 namedtuple 模块 1
  5. Spring Boot 核心知识,深入剖析!
  6. 代码扫描工具测试覆盖率工具
  7. ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
  8. Hello Quartz (第二部分)
  9. JavaScript之改变样式
  10. 设计模式 AOP 面向切入编程
  11. Spring Boot 学习笔记(一)
  12. jquery高清视频教程_入门到精通
  13. 360提高计算机运行速度,简单操作,360优化加速帮你优化电脑运行速度
  14. AxureShare太慢,自己搭建产品原型分享系统
  15. Apollo详解之canbus模块——综述
  16. 美团外卖与饿了么竞品分析
  17. 论测试人员和开发人员沟通的重要性
  18. PS 色调——颜色运算
  19. mysql查询每行重复_MySQL查询返回重复的行
  20. 【沽泡学院07】基于ElasticSearch搜索附近的人

热门文章

  1. 为什么mac插入了u盘没反应 苹果mac插上usb后怎么找到
  2. 仿抖音--将图片转化成对应的字符图片
  3. su: 无法设置组: 不允许的操作
  4. nvcc编译器之GPU代码编译(chapter 5)
  5. 【C语言基础】练习题
  6. java中上转型概念_Java中上转型和重写有什么区别?
  7. dell的笔记本电脑如果开机总是黑屏 需要开几次才能点亮屏幕
  8. 【经验】迅雨田下载测试
  9. 【小技巧】IDEA更换个性自定义背景
  10. matlab将彩图转化成灰度图,matlab 如何将彩图转成灰度图