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

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

PART 0 1

常用参数

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

实例

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

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

软件测试面试文档

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

相关推荐
小二·2 小时前
使用Jmeter对AI模型服务进行压力测试
jmeter·压力测试·可用性测试
水银嘻嘻8 小时前
web 自动化之 selenium+webdriver 环境搭建及原理讲解
前端·selenium·自动化
水银嘻嘻9 小时前
web 自动化之 Selenium 元素定位和浏览器操作
前端·selenium·自动化
上官箫羽9 小时前
Spring Boot 单元测试使用教程(仅供参考)
java·spring boot·单元测试
coding侠客10 小时前
使用Jmeter进行核心API压力测试
java·jmeter·apache·压力测试
waves浪游17 小时前
论坛系统测试报告
测试工具·测试用例·bug·测试
测试老哥1 天前
Selenium使用指南
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
xixixiLucky1 天前
Selenium Web自动化测试学习笔记(一)
笔记·学习·selenium
Lilith的AI学习日记1 天前
纳米AI搜索体验:MCP工具的实际应用测试,撰写报告 / 爬虫小红书效果惊艳
人工智能·测试工具·aigc·ai编程
A137857517901 天前
电机试验平台:功能架构与关键技术介绍
压力测试