首页 > 其他分享 >压力测试Monkey命令参数和报告分析

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

时间:2024-08-22 20:54:11浏览次数:9  
标签:shell Monkey -- adb 事件 测试 参数 monkey

在移动应用的开发过程中,确保APP在高负载下依然能够稳定运行,是保证用户体验的重要一环。为了测试应用的稳定性和性能,压力测试变得至关重要。而其中,Monkey工具以其随机生成事件的方式,成为了开发者进行压力测试的利器。

在使用Monkey进行压力测试时,我们应该如何设置合适的命令参数?测试完成后,又该如何高效地分析测试报告,从而找到潜在的问题呢?

Monkey工具通过模拟用户的操作,随机生成各种事件,如点击、滑动、输入等,以此来检测应用在不同情况下的响应能力。其常用参数包括-p指定包名,--pct-touch设置触摸事件的比例,-s指定随机数种子,-v设置日志级别等。在一次大型APP的压力测试中,开发团队通过精细调整这些参数,发现了在特定场景下应用内存泄漏的问题,并成功优化了应用的性能。

 

 

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查看或通过手机助手查看)

 

随着移动应用的功能日益复杂,用户对应用的稳定性和性能要求越来越高。这也使得压力测试成为了开发流程中不可或缺的一部分。Monkey工具的应用,不仅能帮助开发者在早期发现潜在问题,还能避免在应用发布后因崩溃或卡顿而带来的用户流失。

压力测试在应用开发中扮演着重要的角色,而Monkey工具则是其中不可或缺的一环。通过合理设置命令参数并深入分析测试报告,开发者可以有效提升应用的稳定性和用户体验,为产品的成功保驾护航。

精细化的压力测试,是应用稳定性和性能的基石。掌握Monkey的使用技巧,让你的APP在任何压力下,都能表现得游刃有余。

 

标签:shell,Monkey,--,adb,事件,测试,参数,monkey
From: https://www.cnblogs.com/zhuuque23/p/18374740

相关文章

  • Selenium + Python 自动化测试22(PO+数据驱动)
            我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。上一篇我们讨论了PO模式和unittest框架结合起来使用。        本篇文章我们综合一下之前学习的内容,如先将PO模式、数据驱动思想和我们生成HTML报告融合起来,综合的灵活的使用......
  • 达梦读写分离集群的配置与测试
    操作系统版本CentOS7.6数据库版本DM8_20240712数据守护集群版本V4.0目录1.环境准备2.dm_svc.conf配置3.实现原理4.测试1.环境准备        配置读写分离集群,需要先搭建即时归档或实时归档模式的主备集群。我们使用上篇文档《在一台主机上搭建达梦主备集群......
  • 2024暑假集训测试31
    前言比赛链接。本来挺水的一场,挂分挂狠了,T1被unordered_map害死了;T2赛时一看这不OSU嘛,反正也会先把部分分打满回来再写吧……T3只想说出题人三天不骂上房揭瓦,你大样例锅了就锅了能不能说明白,就发一条消息“T3样例输出”总共\(6\)个字,鬼知道你说的是大样例,看一......
  • C/C++语言基础--指针三大专题详解3,完结篇(包括指针做函数参数,函数指针,回调函数,左右法
    本专栏目的更新C/C++的基础语法,包括C++的一些新特性前言指针是C/C++的灵魂,和内存地址相关联,运行的时候速度快,但是同时也有很多细节和规范要注意的,毕竟内存泄漏是很恐怖的指针打算分三篇文章进行讲解,本专题是三,完结篇,介绍了指针做函数参数,函数指针,回调函数,左右法则解决复......
  • 如何对加密货币交易所进行渗透测试
    原创KK安全说近期,我个人突然对了货币交易所的渗透产生了兴趣,又看到最近Wazir-X多重签名钱包遭受网络攻击,2.3亿美元被盗,就在这里和大家讨论加密货币交换的安全性,我们将了解加密货币交换的组成部分以及如何对其进行渗透测试。1.用户界面(网络和移动应用程序):这是在网站或移动应......
  • 南京理工大学C++程序设计基础期末考试上机测试题组3答案详细解析
    角谷步数(100分)任意的正整数,比如5,我们从它开始,如下规则计算:如果是偶数,则除以2,如果是奇数,则乘以3再加1。如此循环,最终必会得到“1”!比如5的处理过程是:5168421一个正整数经过多少步才能变成1,称为角谷步数。对于5而言,步数也是5;对于1,步数为0。输入一个整数n(1<n<300)......
  • 两个店铺组中进行价格测试时的统计学分析
    商业活动中,有时会选择两个或者若干店铺组对商品价格进行测试,那么如何检验测试前后销售变化(影响)的差异呢。在这种情况下,我们需要针对每个组分别比较测试前后的销售数据,并确定这种变化是否在统计上显著。方法概述在这种情况下,可以使用以下方法:配对t检验(Pairedt-test):用于比......
  • CANoe_UDS-boorloader 自动化测试系列(六)基本功能:CAPL实现bin文件数据解析
    CANoe_UDS-booroader自动化测试系列(一)创建一个CANoe测试工程(测试节点的选选择)CANoe_UDS-booroader自动化测试系列(二)基本刷写流程CANoe_UDS-booroader自动化测试系列(三)基本功能:CAPL实现UDS协议下的CAN报文接收#解析#发送CANoe_UDS-booroader自动化测试系列(四)基本功能:CAPL实......
  • iPhone 16系列详细参数曝光
    根据海外媒体的最新汇总,iPhone16系列的详细配置和价格已经曝光,其中标准版iPhone依然延续60Hz屏幕,成为众多果粉关注的热点。据悉,iPhone16将搭载6.1英寸的60Hz屏幕,内置苹果最新的A18芯片,并支持AppleIntelligence技术。其他方面,iPhone16内置两枚1200万像素摄像头,支持Wi-Fi6E......
  • 6D位姿检测FoundationPose demo测试
    Papertitle:FoundationPose:Unified6DPoseEstimationandTrackingofNovelObjectsPaperlink:https://arxiv.org/abs/2312.08344Codelink:GitHub-NVlabs/FoundationPose:[CVPR2024Highlight]FoundationPose:Unified6DPoseEstimationandTrackingof......