记得 关注转发~~~

之前写过一篇关于稳定性测试的文章:

Monkey随机性能压测初探(一)

01

什么是稳定性测试

稳定性测试,是在一定压力的情况下,对系统或某个模块持续进行长时间的操作(一般遵循7*24小时原则),系统没有出现业务问题、业务异常、内存泄露溢出等性能问题,保证了系统的稳定性,说明稳定性测试是通过的。稳定性测试一般在业务测试、性能测试完成后再进行。

我们可以借助Monkey工具模拟用户操作进行稳定性测试。

02

Money是什么

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

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

03

Monkey的介绍

03

Monkey的介绍

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

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

Monkey 命令启动方式:

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

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

  • 在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

04

Monkey架构

05

Monkey弱点

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

06

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、时间选项的参数通常有:

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

  • -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值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;

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-touch50 --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

07

Monkey的结果与分析

1、初步分析方法:

Monkey: 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:
//  15.0%  --事件0 为touch事件,就是相当于按下之后弹起来的一个动作
//  10.0%  --事件1 为motion,相当于说从起始点到终点有移动了多少步,就是步骤数量 
//  2.0%   --事件2 为pinchzoom,为两个手指有同时按下去后,都向中间移动后up起来,相当于一个缩放的动作。
//  15.0%  --事件3 为trackball,为轨迹球事件 
//  -0.0%  --事件4 为rotation 为屏幕旋转百分比隐藏事件
//  25.0%  --事件5 为nav导航事件,就是上下左右
//  15.0%  --事件6 为majornav主导航事件,会产生一些窗口的事件
//  2.0%   --事件7 为系统按键
//  2.0%   --事件8,app应用的打开就是用的这个事件
//  1.0%   --事件9,键盘的开,关

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

日志结尾:

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

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

2、详细分析:

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

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

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

  • 奔溃问题: 在日志中搜索 “Exception”

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

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

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

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

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

08

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

09

–hprof 参数报告

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

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

拖进AndroidStudio即可查看

10

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

模版:

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

Monkey稳定性测试初探(二)相关推荐

  1. android monkey压力测试(二)

    一.什么是Monkey 顾名思义,Monkey就是猴子,  Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试.  猴子什么都不懂, 只知道乱敲 通过Monkey程序模拟用户触摸屏幕.滑动T ...

  2. monkey稳定性测试详细介绍

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

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

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

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

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

  5. monkey稳定性测试

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

  6. APP测试之Monkey压力测试(二)

    ------·今天距2020年85天·------ 这是ITester软件测试小栈第51次推文 大家好,我是coco小锦鲤 欢乐的假期即将走远 学习的号角继续吹响 延续昨天Monkey(一) 今天进军 ...

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

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

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

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

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

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

最新文章

  1. Eclipse常用功能键
  2. SDK,JDK,API的区别
  3. 【概率论】1-0:介绍
  4. ora-28547 可能是oracle net 管理错误_PostgreSQL与Oracle:成本、易用性和功能上的差异...
  5. Excel 培训笔记
  6. 虚拟机中Linux安装可视化界面
  7. C/C++中最快、最简洁的read()快读(卡常数)方法
  8. Docker配置镜像加速器
  9. iOS开发图片合成,多张图片合成一张图片
  10. 第十二章 国民收入的决定:AD-AS模型
  11. 公众号600篇文章分类和索引
  12. JS变量、数据类型及运算符
  13. 望京,承包了帝都码农圈的魔幻
  14. 一文尽览!弱监督语义/实例/全景分割全面调研(2022最新综述)
  15. 前端开发需要会什么?先掌握这三大核心关键技术
  16. 四六级真题长难句分析与应用
  17. 换主板驱动改良红外连接
  18. Resolving Recurrence
  19. Go protobuf
  20. 画论19 李宗谔《黄筌竹赞序》

热门文章

  1. php 事件调度,PHP单元测试调度事件
  2. Spring Boot——@ConfigurationProperties与@Value的区别
  3. php手机电子相册,免费电子相册制作软件 手机电子相册制作软件
  4. 燃气灶电气线路图及原理_一位造价大神的电气工程造价知识整理笔记_深圳电气造价预算培训要多少钱...
  5. php面试宝典1000题,【PHP面试宝典1000题】HTTP中的请求头(深圳小美网络科技)
  6. 2014年二级c语言,2014年计算机二级考试C语言选择题
  7. java大量浮点数如何作比较,Java如何正确比较浮点数
  8. 毕设/私活/兼职必备,一个挣钱的开源【SpringBoot+Spring Security+MyBatis Plus】脚手架
  9. 以太坊代币事件监控_以太坊:什么是ERC20标准?
  10. c语言上机题库程序设计,C语言上机程序设计题库及答案.docx