压力测试Monkey命令参数和报告分析!

adb的操作命令格式一般为:adb shell monkey +命令参数

PART 01

常用参数

-p <测试的包名列表>

用于约束限制,用此参数指定一个或多个包。指定包之后,Monkey将只允许系统启动指定的APP。如果不指定包,Monkey将允许系统启动设备中的所有APP。

  • 不指定包:adb shell monkey 50

  • 指定一个包执行50次:adb shell monkey -p 包名 50

  • 指定多个包执行50次:adb shell monkey -p 包名1 -p 包名2 50

具体有哪些包名,可以通过adb shell,进入data/data/路径下,ls查看。

-v 显示日志详细程度

用于指定反馈信息级别(信息级别就是日志的详细程度),差异为-v的数量。总共分3个级别,分别对应的参数:

  • Level 0 : adb shell monkey -p 包名 -v 100        //默认级别,仅提供启动提示、测试完成和最终结果等少量信息

  • Level 1 : adb shell monkey -p 包名 -v -v 100        //提供较为详细的日志,包括每个发送到Activity的事件信息

  • Level 2 : adb shell monkey -p 包名 -v -v -v 100        //最详细的日志,包括了测试中选中/未选中的Activity信息

-s 伪随机数生成器的种子值

用于指定伪随机数生成器的seed值。如果使用相同的种子值重新运行Monkey,它将生成相同的事件序列,[-s 500 (事件序列) 1000(事件数)]

例如:

test1:adb shell monkey -p com.youdao.dict -s 10 -v 100

test2:adb shell monkey -p com.youdao.dict -s 10 -v 100

--throttle < 毫秒>

在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被完成。

例如:adb shell monkey -p com.youdao.dict --throttle 200 50        //表示执行50个用户事件数,事件间隔为200毫秒

--ignore-crashes 忽略崩溃

当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,即使应用程序崩溃,Monkey将继续向系统发送事件,直到事件计数完成。

例如:adb shell monkey -p com.youdao.dict --ignore-crashes 100        //测试过程中即使程序崩溃,Monkey依然会继续发送事件,直到事件数目达到100为止

 --ignore-timeouts 忽略超时

当应用程序发生任何超时错误时(如“Application Not Responding”),Monkey将停止运行。如果设置此选项,即使应用程序发生ANR错误,Monkey将继续向系统发送事件,直到计数完成。

例如:adb shell monkey -p com.youdao.dict --ignore-timeouts 100   //测试过程中即使程序发生ANR错误,Monkey依然会继续发送事件,直到事件数目达到100为止

--monitor-native-crashes 监视本地崩溃代码

监视并报告Android系统中本地代码的崩溃事件。

例如:adb shell monkey -p com.youdao.dict --monitor-native-crashes 100  //原理同上

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

当应用程序发生许可错误时(如证书许可,网络许可等),Monkey将停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。

例如:adb shell monkey -p com.youdao.dict --ignore-security-exceptions 100        //原理同上

--kill-process-after-error 发生错误停止运行并保持当前状态

当应用程序发生错误时,停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。

例如:adb shell monkey -p com.youdao.dict --kill-process-after-error 100        //同上

--pct-事件类别+事件类别百分比

用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)

操作事件简介

Monkey所执行的随机事件流中包含11大事件,分别是触摸(touch)、手势(motion)、缩放(pinchzoom)、轨迹(trackball)、屏幕旋转(rotation)、基本导航(nav)、主要导航(mojornav)、系统按键(syskeys)、Activity启动(appswitch)、键盘翻转(flip)、其他事件(anyevent)

Monkey通过这11大事件来模拟用户的常规操作,对手机App进行稳定性测试。

--pct-touch  触摸事件

--pct-motion  手势事件

–pct-pinchzoom  二指缩放事件

–pct-trackball  轨迹事件

–pct-rotation  屏幕旋转事件

–pct-nav  基本导航事件

–pct-majornav  主要导航事件

–pct-syskeys  系统按键事件

–pct-appswitch  启动activity事件

–pct-flip  键盘翻转事件

–pct-anyevent  其他类型事件

PART 02

实例

adb shell monkey -p com.android.gallery3d -s 50 --ignore-crashes --ignore-timeouts --monitor-native-crashes --ignore-security-exceptions --kill-process-after-error --throttle 300 -v -v -v 10000 >D:\monkey_log\monkey_log.txt        //将跑完monkey后写入到电脑D盘的指定目录下并生成一个文件

Monkey日志分析

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

异常情况    

Monkey 测试出现错误后,一般的分析步骤

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

在日志中搜索 “ANR”

程序无响应的问题: 在日志中搜索 “ANR”,ANR: Application Not Responding 应用程序无响应。

ANR一般有以下三种类型:

  • KeyDispatchTimeout(5 seconds) --主要类型:按键或触摸事件在特定时间内无响应

  • BroadcastTimeout(10 seconds):BroadcastReceiver在特定时间内无法处理完成

  • ServiceTimeout(20 seconds) --小概率类型:Service在特定的时间内无法处理完成

此外当ANR问题发生后我们可以使用adb pull命令(此命令无需root权限)从被测设备的/data/anr目录下导出名为traces.txt的对应log文件。例子: adb pull /data/anr/traces*.txt > C:\   

崩溃问题搜索 “CRASH” 

图片

异常问题搜索 “Exception”

(如果出现空指针, NullPointerException,需格外重视,肯定有bug)

下面的属于monkey自己的问题。不用管。

:Sending Flip keyboardOpen=false

Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument)

// Injection Failed

⏩ 内存泄露问题搜索"GC"(需进一步分析)

当手机提示Out of Memory(内存不足)时基本确定有内存泄露的问题。

当查看logcat时有GC字段,可能有内存泄露问题。与GC相关的字段有如下四个:

  • GC_FOR_ALLOC 在分配内存时内存不够引发

  • GC_EXPLICIT 表明GC被显式请求触发的,如System.gc调用

  • GC_CONCURRENT, 表明GC在内存使用率达到一定的警戒值时,自动触发

  • GC_BEFORE_OOM, 表明在虚拟机抛出内存不够异常OOM之前,执行最后一次回收内存垃圾

当出现内存泄露问题时可以加上--hprof参数再执行一次monkey测试,便可获得对应的profiling报告。

adb shell monkey -p 包名 --hprof --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:\monkey.txt

如果指定了这个选项,monkey会在发送时间的前后生成app内存快照文件,一般会在手机设备的/data/misc目录下生成hprof的文件。(注:/data/misc 需要root权限,可以在手机上安装个RE查看或通过手机助手查看)

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

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测

SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测 目录 SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现SSA-CNN-LSTM-MATT麻雀算法优化卷积神经网络-长短期记忆神经网络融合多头注意力机制多特征分类预测&…

GPU 服务器厂家:中国加速计算服务器市场的前瞻洞察

科技的飞速发展&#xff0c;让 GPU 服务器在加速计算服务器领域的地位愈发凸显。中国加速计算服务器市场正展现出蓬勃的生机&#xff0c;而 GPU 服务器厂家则是这场科技盛宴中的关键角色。 从市场预测的趋势来看&#xff0c;2023 年起&#xff0c;中国加速计算服务器市场便已展…

Go第三方框架--gorm框架(二)

增删改查&#xff08;dml操作&#xff09; 查询操作 gorm查询主要执行了三种操作&#xff1a; 通过链式函数调用累计查询条件&#xff08;在map[string]clause.Clause中累计&#xff09;将查询条件转换成sql&#xff08;赋值给 Statement.SQL和Statement.Vals&#xff09;执…

A Simple Semi-Supervised Learning Framework for Object Detection

1. Introduction SSL的成功主要有以下两个方面&#xff1a; &#xff08;1&#xff09;一致性正则化&#xff1a;如果对一个未标记的数据应用实际的扰动, 其预测结果不应该发生显著变化, 也就是输出具有一致性&#xff0c;通过在未标记数据上构造添加扰动后的预测结果 y~​ 与…

【51 Pandas+Pyecharts | 深圳市共享单车数据分析可视化】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 处理起始时间、结束时间2.4 增加骑行时长区间列2.5 增加骑行里程区间列 &#x1f3f3;️‍&#x1f308; 3. Pyecharts数据可视化3.1 各…

webGlL变量的声明与使用

抢先观看&#xff1a; 变量的声明格式&#xff1a;<存储限定符><类型限定符><变量名> 存储限定符&#xff1a;const, attribute, uniform, varying, buffer。 类型限定符&#xff1a;void, bool, int, float, double, vec2, vec3, vec4, mat2, mat3, mat4, s…

基于SSM的成都市旅游信息管理系统-计算机毕业设计源码65815

SSM成都市旅游信息管理系统 摘 要 本论文主要论述了如何使用SSM框架开发一个旅游信息管理系统&#xff0c;严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构JAVA技术&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述旅游信息管理系…

91.【C语言】数据结构之单向链表的头删和尾删

目录 1.尾删函数SLTPopBack 代码示例(写入SList.c) 在SList.h中写入该函数的声明 main.c部分代码改为 ​编辑 分析 解决方法 方法1:双指针算法(快指针tail,慢指针pretail) 方法2 2.头删函数SLTPopFront 一个节点示意图 多个节点示意图 代码示例(写入SList.c) 在S…

DEVOPS: 集群伸缩原理

概述 阿里云 K8S 集群的一个重要特性&#xff0c;是集群的节点可以动态的增加或减少有了这个特性&#xff0c;集群才能在计算资源不足的情况下扩容新的节点&#xff0c;同时也可以在资源利用 率降低的时候&#xff0c;释放节点以节省费用理解实现原理&#xff0c;在遇到问题的…

华为OD机试 - 无向图染色(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

云智慧完成华为原生鸿蒙系统的适配, 透视宝 APM 为用户体验保驾护航

2024 年 10 月 22 日&#xff0c;首个国产移动操作系统 —— 华为原生鸿蒙操作系统 HarmonyOS NEXT 正式面世&#xff0c;成为继 iOS 和 Android 后的全球第三大移动操作系统。HarmonyOS NEXT&#xff0c;从系统内核、数据库根基&#xff0c;到编程语言创新、AI&#xff08;人工…

无人机之任务分配算法篇

无人机的任务分配算法是无人机系统中的重要组成部分&#xff0c;它决定了无人机如何高效、合理地执行各种任务。以下是一些常见的无人机任务分配算法&#xff1a; 一、合同网协议&#xff08;Contract Net Protocol, CNP&#xff09; 基本概念&#xff1a;CNP算法是一种分布式…

【WRF数据处理】基于GIS4WRF插件将geotiff数据转为tiff(geogrid,WPS所需数据)

【WRF数据处理】基于GIS4WRF插件将geotiff数据转为tiff&#xff08;geogrid&#xff0c;WPS所需数据&#xff09; 数据准备&#xff1a;以叶面积指数LAI为例QGis实操&#xff1a;基于GIS4WRF插件将geotiff数据转为tiff警告&#xff1a;GIS4WRF: Input layer had an unexpected …

【MySQL基础】高级查询

文章目录 一、聚合函数&#xff1a;COUNT、SUM、AVG、MIN、MAX1. 统计总数&#xff1a;COUNT2. 计算总和&#xff1a;SUM3. 计算平均值&#xff1a;AVG4. 找最小值&#xff1a;MIN5. 找最大值&#xff1a;MAX 综合使用聚合函数的例子小结 二、分组查询——GROUP BY 和 HAVING1.…

ElasticSearch备考 -- Index shrink

一、题目 索引task包括5个分片一个副本&#xff0c;对索引执行shrink压缩操作&#xff0c;压缩后索引为1主分片&#xff0c;索引名称为task-new 二、思考 在执行shrink前必须满足三个前置条件 The index must be read-only.A copy of every shard in the index must reside o…

名词(术语)了解--CSSOM (CSS Object Model)

名词&#xff08;术语&#xff09;了解–CSSOM (CSS Object Model) CSSOM 概述 CSSOM 是一个与 DOM (Document Object Model) 相对应的、用于 CSS 的 API 集合。 它提供了一种程序化的方式来读取和修改文档的样式信息。 CSSOM 的主要组成部分 样式规则树 document └── …

智能化超声波影像分析,优化医疗决策的开源AI解决方案

思通数科的医疗信息精准抽取系统是一款基于人工智能的开源软件&#xff0c;旨在自动化处理医疗数据&#xff0c;特别是从超声波影像到诊断报告的信息提取。该系统集成了图像识别、自然语言处理和知识图谱等先进技术&#xff0c;能够从医疗影像中提取关键数据&#xff0c;并将这…

Objective-C 音频爬虫:实时接收数据的 didReceiveData_ 方法

在互联网技术领域&#xff0c;数据的获取和处理是至关重要的。尤其是对于音频内容的获取&#xff0c;实时性和效率是衡量一个爬虫性能的重要指标。本文将深入探讨在Objective-C中实现音频爬虫时&#xff0c;如何高效地使用didReceiveData:方法来实时接收数据&#xff0c;并通过…

Python轴承故障诊断 (15)基于CNN-Transformer的一维故障信号识别模型

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…

如何在 Elasticsearch Ruby 客户端中使用 ES|QL Helper

作者&#xff1a;来自 Elastic Fernando Briano 了解如何使用 Elasticsearch Ruby 客户端编写 ES|QL 查询并处理其结果。 简介 Elasticsearch Ruby 客户端可用于编写 EQ|QL 查询&#xff0c;使处理从 esql.query 返回的数据更加容易。ES|QL 允许开发人员通过查询过滤、转换和分…