一文5000字彻底搞懂App的Monkey稳定性测试【保姆级教程】

1662 篇文章 57 订阅
订阅专栏
1613 篇文章 75 订阅
订阅专栏
1439 篇文章 116 订阅
订阅专栏

01、什么是稳定性测试

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

02、Money是什么

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

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

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

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

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

这些都在下方我的微信公众号里免费获取~

(建议收藏)一文多图,彻底搞懂Floyd算法(多源最短路径)
bigsai
08-27 3万+
前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径。 在单源正权值最短路径,我们会用Dijkstra算法来求最短路径,并且算法的思想很简单—贪心算法:每次确定最短路径的一个点然后维护(更新)这个点周围点的距离加入预选队列,等待下一次的抛出确定。虽然思想很简单,实现起来是非常复杂的,我们需要邻接矩阵(表)储存长度,需要优先队列(或者每次都比较)维护一个预选点的集合。还要用一个boolean数组标记是否已经确定、
一文彻底搞懂快速幂(原理、实现、矩阵快速幂)
bigsai
08-15 6940
前言 大家好,我是bigsai,之前有个小老弟问到一个剑指offer一道相关快速幂的题,这里梳理一下讲一下快速幂! 快速幂是什么? 顾名思义,快速幂就是快速算底数的n次幂。你可能疑问,求n次幂算n次叠乘不就行了?当n巨大无比时候,如果需要末尾有效尾数值等信息这个可能超出计算机运算范围。 有多快? 快速幂时间复杂度为 O(log₂n), 与朴素的O(n)相比效率有了极大的提高(int 范围10位长度数32次之内就能搞定,long 范围20位长度数64次之内也能搞定,你看有多快)。 用的多么? 快速幂属于数
APP使用Monkey进行稳定性测试
sleeplover_soda的博客
06-29 822
稳定性测试是软件长时间持续运行,系统版本是否稳定,是否能持续的为用户提供服务稳定性测试也是性能测试一种。
Monkey测试
m0_60982118的博客
10-26 1335
Money介绍 顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么 都不懂, 只知道乱敲 通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程 序多久的时间会发生异常 Monkey用来做什么 Monkey 主要用于Android的稳定性测试,自动的一个压力测试小工具, 主要目的就是为了测试app 是否会 Crash(崩溃). Monkey程序介绍 (1) Monkey程序由Androi
压力测试Monkey命令参数和报告分析!
最新发布
08-22 1632
Monkey所执行的随机事件流中包含11大事件,分别是触摸(touch)、手势(motion)、缩放(pinchzoom)、轨迹(trackball)、屏幕旋转(rotation)、基本导航(nav)、主要导航(mojornav)、系统按键(syskeys)、Activity启动(appswitch)、键盘翻转(flip)、其他事件(anyevent)
事件
Persiguiendo的博客
09-08 271
事件、事件处理模型、事件对象、事件委托、事件分类
使用monkey工具进行稳定性测试
weixin_45730522的博客
12-28 2403
使用monkey工具进行稳定性测试
XML 教程一文彻底搞懂XML)
热门推荐
m0_58859743的博客
06-03 4万+
帮你一次性彻底搞懂XML
【GIS风暴】一文彻底弄懂数地形(DEM、DOM、TDOM、DSM)的区别与联系
「 刘一哥与GIS的故事」
05-18 1万+
在2021自然资源部发布的《实景三维中国建设技术大纲(2021版)》中,空间数据部分包括“数高程模型(DEM)、数表面模型(DSM)、数正射影像(DOM)、真正射影像(TDOM)、倾斜摄影三维模型、激光点云等。” 那么到底什么是DEM、DOM、TDOM、DSM,它们之间又有什么用的区别和联系呢? 文章目录1. 数高程模型(Digital Elevation Model)2. 数地面模型(Digital Terrain Model)3. 数地表模型(Digital Surface Model
Android_Monkey自动测试工具使用报告
03-29
什么是Monkey? 使用Monkey做自动化。 Monkey工具的命令
分不清路由器、交换机、光猫的概念,一文带你迅速搞懂
网络技术联盟站
04-25 3430
当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成部分,承担着连接、传输和管理数据的重要任务。在日常生活和工作中,我们几乎离不开它们的存在,无论是在家中上网、办公室内部通信,还是在互联网上浏览网页,都离不开这些看似普通但却至关重要的网络设备。本文瑞哥带大家好好了解一下路由器、交换机和光猫这三种网络设备。
Monkey测试简介[附示例]
weixin_30502965的博客
08-22 463
一、Monkey测试简介Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。二、Monkey程序介绍1) Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.j...
Monkey 测试
★慕名斋★
10-20 1194
MONKEY 基本用法: adb shell monkey [options]  Monkey完整测试命令“adb shell monkey -p com.android.contacts -v -v -s 100 --throttle 700 1000 > d:/1.txt” 注意事项: adb shell monkey 1000必须存在,1000是触发的随机事件的次数,数值越大测试内容
一文彻底搞懂python面向对象编程
07-07
Python面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作封装在对象中,通过对象之间的交互实现程序的设计和开发。下面是一些关键概念,帮助你更好地理解Python面向对象编程。 1. 类(Class):类是对象的蓝图或模板,描述了对象的属性和行为。它定义了对象的特征和方法。例如,我们可以定义一个名为"Car"的类来表示汽车,其中包含属性(如颜色、型号)和方法(如加速、刹车)。 2. 对象(Object):对象是类的实例,是具体的实体。通过实例化类,我们可以创建一个对象。例如,我们可以创建一个名为"my_car"的对象,它是基于"Car"类的实例。 3. 属性(Attribute):属性是对象的特征,用于描述对象的状态。每个对象都可以具有一组属性。例如,"Car"类的属性可以包括颜色、型号等。 4. 方法(Method):方法是对象的行为,用于定义对象的操作。每个对象都可以具有一组方法。例如,"Car"类的方法可以包括加速、刹车等。 5. 继承(Inheritance):继承是一种机制,允许我们创建一个新类(称为子类),从现有类(称为父类)继承属性和方法。子类可以扩展或修改父类的功能。继承可以实现代码重用和层次化设计。 6. 多态(Polymorphism):多态是一种特性,允许不同类的对象对同一方法做出不同的响应。多态提高了代码的灵活性和可扩展性。 7. 封装(Encapsulation):封装是一种将数据和操作封装在对象中的机制,隐藏了对象的内部实现细节,只暴露必要的接口给外部使用。这样可以保护数据的安全性,提供了更好的模块化和代码复用性。 通过理解这些概念,你可以更好地掌握Python面向对象编程。在实践中,你可以使用类来创建对象,操作对象的属性和调用对象的方法,通过继承和多态实现代码的灵活性和可扩展性,通过封装保护数据的安全性和提高代码的可维护性。
1859
原创
7539
点赞
1万+
收藏
9566
粉丝
关注
私信
写文章

热门文章

  • 卷麻了,00后测试用例写的比我还好,简直无地自容..... 41184
  • Selenium操作全指南,2w字超全总结 30600
  • Linux搭建测试环境详细步骤 30511
  • 部门来了个测试开发,听说是00后,上来一顿操作给我看呆了... 25967
  • 接口测试用例怎么写?一文1600字教你写一个优秀的接口测试的测试用例 19745

分类专栏

  • 技术分享 1662篇
  • 性能测试 116篇
  • 自动化测试 1613篇
  • 测试工程师 338篇
  • 软件测试 1439篇
  • 程序人生 19篇

最新评论

  • 做软件测试如何突破月薪20K?熬夜7天整理出这一份3000字超全学习指南...

    阿J~: 最近我也在学习写博客,有空来看看我呀,一起互相学习。期待你的关注与支持

  • Fiddler新版全平台适配抓包,关键还免费,再也不用费劲找破解版了

    SmallWhitee: 感谢填坑

  • 软件测试工程师如何面试:逻辑清晰与思维能力的双重考验!

    普通网友: 这篇文章真是一篇佳作!作者运用了生动有趣的语言,将枯燥的理论知识娓娓道来,让人如沐春风。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • python 接口自动化测试中的高阶函数!

    普通网友: 感谢大佬分享好文,学到了不少新知识,支持大佬,期待大佬持续输出优质文章!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • Python中的logging模块解析

    北风之神c: 总结的很全面,写得赞,博主用心了。 此国产日志 https://nb-log-doc.readthedocs.io/zh-cn/latest/articles/c1.html 使用原生 loggng封装,兼容性和替换性100%,只需要一行代码大幅简化logging的使用。 1、日志能根据级别能够自动变彩色。 1 2、print自动变彩色。 3、日志和print在pycahrm控制台的输出都自动可以点击跳转到文件和行号。 4、多进程日志切割安全,文件日志写入性能高 。 5、入参简单,能一键自动记录到多种地方。 6、 nb_log 兼容包含loguru色彩模式,loguru只是nb_log的子集之一. 相比 loguru 有10胜。 pip install nb_log 。

最新文章

  • Selenium自动化测试实现滑动滑块验证码自动识别!
  • 2024 年11个API 自动化测试工具,你知道几个?
  • 性能测试 —— 终于能看懂Jmeter报告了!
2024
10月 14篇
09月 24篇
08月 43篇
07月 57篇
06月 42篇
05月 46篇
04月 53篇
03月 60篇
02月 22篇
01月 46篇
2023年754篇
2022年481篇
2021年92篇
2020年128篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢雕塑手糊制作视频精制的玻璃钢植物雕塑会发光的玻璃钢雕塑厂家深圳大型商场美陈费用玻璃钢景观雕塑马玻璃钢雕塑酒瓶道教玻璃钢雕塑制作保山玻璃钢雕塑订购新郑附近玻璃钢雕塑舞钢玻璃钢雕塑设计佳木斯玻璃钢雕塑厂家南昌玻璃钢商场美陈白城玻璃钢雕塑厂巴中玻璃钢商场美陈资兴玻璃钢牛雕塑泡泡玛特玻璃钢雕塑梅州玻璃钢卡通雕塑供应商长沙玻璃钢雕塑介绍四川动物玻璃钢雕塑供应商上海中庭商场美陈供货商玻璃钢雕塑油漆工艺流程临汾玻璃钢人物雕塑厂家宜兴商场装饰美陈珠三角地区玻璃钢雕塑制品厂红旗造型玻璃钢雕塑长沙花朵校园玻璃钢景观雕塑厂家福建通道商场美陈制造淮南广场玻璃钢雕塑价格玻璃钢花盆组合出售山西大型玻璃钢雕塑制作香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化