当前位置: 首页 > news >正文

软件测试——稳定性测试:adb Monkey

Monkey

  • 1. Monkey
    • 1.1 Monkey 是什么
    • 1.2 Monkey 测试场景
    • 1.3 Monkey 特点
    • 1.4 Monkey 在哪里
    • 1.5 测试准备事项
    • 1.6 Monkey 参数列表
  • 2. 基本命令
  • 3. 常用参数
  • 4. 事件类型
  • 5. 调试参数
  • 6. 日志管理
  • 7. 日志错误定位
  • 8. Monkey测试可以发现的问题

1. Monkey

1.1 Monkey 是什么

       Monkey是一款Android app的自动化测试工具,主要用于app的压力测试和稳定性测试。

       工作原理是通过向系统发送伪随机的用户事件流,如按键输入、触摸屏输入、手势输入等操作,来对设备上的程序进行测试,检测程序长时间的稳定性,多久的时间会发生异常。

1.2 Monkey 测试场景

  • app压力测试、稳定性测试。(功能测试—>专项测试(DFX 兼容性,稳定性)
  • app的耗资源情况(耗电量,流量,内存,cpu等)

1.3 Monkey 特点

  • 没法指定具体业务,发送一些伪随机事件(seed值)
  • 通过参数来做一些设定

1.4 Monkey 在哪里

       Monkey工具存在Android 系统中,使用Java语言写成,jar包在 Android 文件系统中的存放路径是:/system/framework/monkey.jar; Monkey.jar 程序是由一个名为“monkey”的 shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey; monkey需要通过adb来唤醒,即通过在cmd窗口中执行: adb shell monkey{+命令参数} 来进行 Monkey测试。

1.5 测试准备事项

  • 手机准备

1)开发者模式: usb调试
2)解锁(常亮)
3)充足电量
4)放在不影响其它人的地方
5)打开wifi/数据通信

  • 环境准备

1)jdk
2)sdk
3)adb

  • app应用准备

(登录状态)关闭免密支付

1.6 Monkey 参数列表

在这里插入图片描述

       图中的参数并不算全,下面会介绍常用的参数:

2. 基本命令

adb devices										      #测试当前连接设备adb shell pm list packages    						  #查看你的手机所有的安装包adb shell pm list packages -3    				      #查看你的手机所有的第三方安装包#注:尽量少安装第三方软件,这样可以尽快的找到想要的安装包名称adb shell     				                          #可执行shell命令top | grep (包名)    					              #获取该包的CPU内存使用率adb shell dumpsys activity | findstr mFocusedActivity # 获取当前手机运行的包名

3. 常用参数

1)-p 参数:表示指定测试的程序(空格后面跟安装包名字)

例:指定一个app包执行

adb shell monkey -p 包名 100   

解析:此时指定的软件会被打开并开始乱点乱按100次。

例:指定多个app包执行

adb shell monkey -p 包名 -p 包名 100     

解析:此时2个app一起执行 可以去测试两个软件/安装包同时打开是否产生冲突!

例:不指定包

adb shell monkey 100   

解析:此时随机打开一个软件乱点乱按100次。

2)-v:日志详细程度(最高支持‘-v -v -v’三级)

指定日志级别 -v

adb shell monkey -p cn.mopon.film -v 100

说明:日志级别-v :缺省值,仅提供启动提示、测试完成和最终结果等少量信息。

指定日志级别 -v -v

adb shell monkey -p cn.mopon.film-v - 108

说明:日志级别-v -v:提供提供较为详细的日志,包括每个发送到Activity的信息。

指定日志级别 -v -v -v

adb shell monkey -p cn.mopon.film -v -v -v 108

说明:日志级别-v -v -v:提供更详细的日志,包括了测试中选中/未选中的Activity信息。

3)-s:种子,记忆功能,一条命令无论执行几次顺序全一样,方便问题复现

举例:monkey1:点击-滑屏-系统按键-屏幕翻转——对应的命令为adb shell monkey......seed 123.......

解析:当发现此用例/执行有问题,就可以利用种子123做复现,再次执行命令,只要种子是seed 123即可。

4)- throttle:种子,记忆功能(操作间隔时间,单位毫秒)

举例:adb shell monkey -p com.tencent.news -v -s 13 -throttle 500 1000

举例解析:

       指定包名:com.tencent.news

       Log日志: -v = 一级 最多三个:-v -v -v = 最高级 = 三级

       种子记忆:13,自定义,之后再执行命令,执行顺序一样

       单步间隔时间:500毫秒 = 半秒(1000毫秒 = 1秒)

       总计执行事件:1000操作

       在导出的log/txt中 Sleeping for xxxx milliseconds 就是- throttle xxxx(毫秒)!!!

4. 事件类型

在这里插入图片描述

图片解析:

       0:触摸事件百分比,参数–pct-touch

       1:滑动事件百分比,参数–pct-motion

       2:缩放事件百分比,参数–pct-pinchzoo

       3:轨迹球事件百分比,参数–pct-trackball

       4:屏幕旋转事件百分比,参数–pct-rotation

       5:基本导航事件百分比,参数–pct-nav

       6:主要导航事件百分比,参数–pct-majornav

       7:系统事件百分比,参数–pct-syskeys

       8:Acitivity启动事件百分比,参数–pct-appswitch

       9:键盘翻转事件百分比,参数–pct-flip

       10:其它事件百分比,参数–pct-anyevent --ignore-crashes --ignore-timeouts等

举例:

1)命令:–pct-touch 空格后加数字,设定触屏时间生成的百分比。触屏事件是一个有手指按下,抬起事件的手势。

adb shell monkey --throttle 3000 --pct-touch 50 -p com.tencent.news 1000

解析:向腾讯新闻发送1000次随机事件,每次事件间隔为3秒。其中设定触屏的事件占比为50%。

2)命令: --pct-motion 设定滑动事件生成的白分比。滑动事件是一个先在某一个位置手指按下,滑动一段距离后再抬起手指的手势。

adb shell monkey --throttle 3000 --pct-motion 50 -p com.tencent.news 1000

解析:向腾讯新闻发送1000次随机事件,每次事件间隔为3秒。其中设定滑动的事件占比为50%。

3)命令: --pct -trackball 设定轨迹球事件生成的百分比。轨迹球事件是包含一系列随机移动和单击事件的事件。

adb shell monkey --throttle 3000 --pct-trackball 50 -p com.tencent.news 1000

解析:向腾讯新闻发送1000次随机事件,每次事件间隔为3秒。其中设定轨迹球的事件占比为50%。

4)命令: --pct-nav 设定基本导航事件生成的百分比。基本导航事件是模拟方向性在设备上输入向上、向下、向左、向右的事件。

adb shell monkey --throttle 3000_--pct-nav 40 -p com.tencent.news 1000

解析:向腾讯新闻发送1000次随机事件,每次事件间隔为3秒。其中设定基本导航事件的占比为40%。

5)命令 : --pct-majornav 设定主要导航事件生成的百分比。主要导航事件通常会导致UI产生回馈信息,如单击Back键、Home键、Menu键等。

adb shell monkey --throttle 3000 --pct-majornav 40 -p com.tencent.news 1000

解析:向腾讯新闻发送1000次随机事件,每次事件间隔为3秒。其中设定主要导航事件的占比为40%。

6)命令 : --ignore-security-exceptions 通常情况下,指定应用程序发生许可错误时如证书许可,网络许可等),monkey将停止运行。现在会继续:

adb shell morkey --throttle 3000 --pct-trackball 50 -p com.tencent.news --ignore-security-exceptions 100

解析:指定了该参数,即使应用程序发生许可错误,monkey会继续向系统发送事件,直到指定事件全部运行完毕。

注:在log/txt文件中,每个时间后面的百分比占用可以自己设置,例如滑动事件要占比20% 则在命令中:adb shell monkey…–pct-motion 20…就可以在log/txt文件中看到,没有指定其它事件占比,则其它时间随机瓜分占比。

5. 调试参数

1)–ignore-crashes
       指即使应用程序崩溃(Force& Close错误) ,Monkey依然会发送事件,直到事件计数达到指定的次数为止。

如 : adb shell monkey -p cn.mopon.film --ignore-crashes 10000

解析:即使应用程序崩溃,Monkey依然会发送事件,直到事件计数达到10000为止。

2)–ignore-security-exceptions

       指APP发生许可证书错误时,Monkey依然继续发送事件,直到事件数目达到目标值为止。
如:adb shell monkey -p cn.mopon.film --ignore-security-exceptions 1000

3)–ignore-timeouts

       指app在发生ANR(Application No Responding)错误时,Monkey是否停止运行如果使用-ignore-timeouts参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

如:adb shell monkey -p cn.mopon.film -ignore-timeouts 1000

4)–kill-process-after-error

       指APP发生错误时,应用程序停止运行并保持在当前状。

如:adb shell monkey -p cn.mopon.film --kill-process-after-error 1000

当应用程序发生错误时,应用程序停止运行并保持在当前状态,注意系统并不会结束该应用程序的进程。

也可以多个控制参数一起使用:

adb shell monkey -p cn.mopon.film --ignore-crashes --ignore-timeouts 10000

注:当app崩溃,发生ANR错误时继续测试。

6. 日志管理

  • 作用:

       Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和解决问题。

  • 查看:

    1)直接在dos窗口下执行命令后会显示出来
    2)例如adb shell adb shell monkey -p 包名 -v -v -v 100,在命令最后加上>E:\monkey.log

  • monkey 日志保存方法:

    1)保存在PC中
    2)保存在手机上
    3)标准流和错误流分开保存

  • 保存在PC中:

    举例:adb shell monkey -v -v 100 > e:\monkeylog.txt
    或者:adb shell monkey -v -v 100 > e:\monkeylog.log

在这里插入图片描述

  • 保存在手机上:
adb shell monkey -v 100 >/sdcard/monkeylog.txt

打开文件管理器就可以查看。

  • 标准流和错误流分开保存

举例 1:adb shell monkey -v 100 1>e:\monkey.txt 2>e:\error.txt

解析:在E盘中会显示monkey.txt和error.txt文本,monkey.txt保存着Monkey正常运行日志,error.txt保存着Monkey异常日志。

举例 2:指定手机文件运行日志和异常日志保存到E盘下。

adb shell monkey - f /sdcard/wxz.txt -v -v 1 1>e:\monkey.txt 2>e:error.txt

解析:第一个1代表一个文件,第二个1代表正常运行日志,执行上述命令,Monkey的运行日志和异常日志将被分开保存。

7. 日志错误定位

1)程序无响应的问题,在日志中搜索:ANR 无响应。

可能的原因有:

a、当前有耗时操作在UI线程指定,导致卡UI了。

b、在5s内没有响应输入事件( eg:按键、触摸屏幕)。

c、BroadcastReceiver在特定时间内(10s)无法处理完成在logcat将出现anr问题的进程号复制,然后在trace.txt文件里。

按ctrl+F查找,粘贴进程号,查找对应的问题。

2)崩溃问题

在日志中搜索:Exception,如果出现空指针,则肯定有bug

常见错误类型:

异常与错误类型                                              说明
java.lang.NullPointException                            空指针异常
java.lang.ArrayIndexOutOfBoundsException                数组溢出
java.lang.classNotFoundException                        类不存在
java.lang.ArithmeticException                           数学运算异常
java.lang.IllegalArgumentException                      方法参数错误
java.io.FileNotFoundException                           文件未找到
java.lang.NumberFormatException                         数值转化异常
java.lang.StackOverFlowError                            推展异常错误
java.lang.OutOfMemoryError                              内存溢出错误

3)monkey执行中断搜索:crash、error

8. Monkey测试可以发现的问题

Android平台应用程序可能产生以下四种Crash:

App层(JAVA应用程序):

1、Force Close Crash

2、ANR Crash

Native层(本地框架):

3、Tombstone Crash(Native Crash)

Kernel层(LINUX内核空间)

4、Kernel Panic

注:Monkey的参数没有顺序要求,但是随机事件数是一定要放在最后的!!!

相关文章:

软件测试——稳定性测试:adb Monkey

Monkey 1. Monkey1.1 Monkey 是什么1.2 Monkey 测试场景1.3 Monkey 特点1.4 Monkey 在哪里1.5 测试准备事项1.6 Monkey 参数列表 2. 基本命令3. 常用参数4. 事件类型5. 调试参数6. 日志管理7. 日志错误定位8. Monkey测试可以发现的问题 1. Monkey 1.1 Monkey 是什么 Monkey是一…...

前端vue实战项目结构、常用编辑器vs code 配置

5.Complete JSDoc Tags 6.Custom CSS and JS Loader 7.Debugger for Chrome 8.EditorConfig for VS Code 9.ESLint ☆☆☆ 10.gitignore 11.GitLens — Git supercharged 12.npm 13.PostCSS syntax !important 14.Vetur ☆ 15.vscode-icons 16.vue-i18n 17.Markdow…...

Linux系统性能优化实战经验

1、影响Linux系统性能的因素一般有哪些? Linux系统的性能受多个因素的影响。以下是一些常见的影响Linux系统性能的因素: CPU负载:CPU的利用率和负载水平对系统性能有直接影响。高CPU负载可能导致进程响应变慢、延迟增加和系统变得不稳定。 …...

2024广东省职业技能大赛云计算赛项实战——Ansible部署Zabbix

Ansible部署Zabbix 前言 今年的比赛考了一道Ansible部署Zabbix的题目,要求就是用两台centos7.5的云主机,一台叫ansible,一台叫node,使用对应的软件包,通过ansible节点控制node节点安装zabbix服务。这道题还是算比较简…...

Linux—— ansible循环

1.如果有大量的变量要定义,如果多个变量本身类型相同或类似 再比如,同一个剧本,给主机同时安装多个软件包 按照已有的用法,每个软件包都对应不同变量,还会涉及到改剧本 2.现在可以用清单,以及playbook里…...

RabbitMQ 开发指南

连接RabbitMQ 连接方式一: 也可以选择使用URI的方式来实现 连接方式二: Connection接口被用来创建一个Channel,在创建之后,Channel可以用来发送或者接收消息。 Channel channel conn.createChannel();使用交换器和队列 声明…...

ElasticSearch学习笔记(二)文档操作、RestHighLevelClient的使用

文章目录 前言3 文档操作3.1 新增文档3.2 查询文档3.3 修改文档3.3.1 全量修改3.3.2 增量修改 3.4 删除文档 4 RestAPI4.1 创建数据库和表4.2 创建项目4.3 mapping映射分析4.4 初始化客户端4.5 创建索引库4.6 判断索引库是否存在4.7 删除索引库 5 RestClient操作文档5.1 准备工…...

python离线安装第三方库、及其依赖库(单个安装,非批量移植)

文章目录 1.外网下载第三方库、依赖库2.内网安装第三方库3.补充附录内网中离线安装python第三方库,这时候只能去外网手动下载第三方库,再传回内网进行安装。 问题是python第三方库往往有其前置依赖包,你很难清楚某个第三方库依赖的是哪些依赖包,更难受的是依赖包可能还有其…...

昨天发的 npm 包,却因为 registry 同步问题无法安装使用

用过 HBuilderX 云打包的都知道,云上面的 Android 环境很有限,其实并不能覆盖 uniapp 生态所有的版本,甚至说只能覆盖最新的一两个版本。 如果你需要用到 HBuilderX 安卓云打包,就必须及时跟进 HBuilderX 的版本更新,…...

Redis 数据恢复及持久化策略分析

在分布式系统中,Redis作为高性能的键值存储数据库,广泛应用于缓存、会话管理、消息队列等场景。对于Redis数据的可靠性,持久化是至关重要的一环。当Redis宕机时,如何恢复数据成为一个关键问题。这篇文章将详细分析Redis的数据恢复…...

vscode 快捷键侧边栏

_____ 配置 vscode 快捷键 visual studio code - open explorer and close sidebar with the same key - Stack Overflow { "key": "ctrlshifte", // when Explorer not open // "command": "workbench.view.explorer", // either…...

FreeRTOS:1、任务通知vTaskNotifyGiveFromISR保证实时性

文章目录 背景解释意义 背景 首先,我们看以下代码: #include "FreeRTOS.h" #include "task.h"TaskHandle_t s_task_handle NULL;void vTaskFunction(void *pvParameters) {for (;;) {// 等待通知ulTaskNotifyTake(pdTRUE, portMA…...

监督学习:从数据中学习预测模型的艺术与科学

目录 引言 一、监督学习的基本概念 1、数据集 2、特征 3、标签 4、模型 二、监督学习的原理和方法 1、基本原理 2、常用方法 三、监督学习的定义与分类 1、 定义 2.、分类 四、为什么是监督学习? 1、 明确的学习目标 2、高准确率 3、易于评估 4、 …...

深入理解Java虚拟机(JVM)中的垃圾回收器

垃圾回收(Garbage Collection, GC)是现代编程语言中用于管理内存的重要机制,特别是在Java虚拟机(JVM)中。 它的基本原理是自动检测和释放不再被程序使用的内存,以避免内存泄漏和提高程序执行效率。 1.GC的基…...

视频集市新增支持多格式流媒体拉流预览

流媒体除了常用实时流外还有大部分是以文件的形式存在,做融合预览必须要考虑多种兼容性能力,借用现有的ffmpeg生态可以迅速实现多种格式的支持,现在我们将按需拉流预览功能进行了拓展,正式支持了ffmpeg的功能,可快捷方…...

定时器-前端使用定时器3s轮询状态接口,2min为接口超时

背景 众所周知,后端是处理不了复杂的任务的,所以经过人家的技术讨论之后,把业务放在前端来实现。记录一下这次的离大谱需求吧。 如图所示,这个页面有5个列表,默认加载计划列表。但是由于后端的种种原因,这…...

python实践笔记(二): 类和对象

1. 写在前面 最近在重构之前的后端代码,借着这个机会又重新补充了关于python的一些知识, 学习到了一些高效编写代码的方法和心得,比如构建大项目来讲,要明确捕捉异常机制的重要性, 学会使用try...except..finally&…...

指定GPU跑模型

加上一个CUDA_VISIBLE_DEVICES0,2就行了,使用0卡和2卡跑模型,注意多卡有时候比单卡慢,4090无NVlink,数据似乎是通过串行的方式传输到多个gpu的,只不过单个gpu是并行计算,数据在gpu与gpu之间似乎是串行传输的…...

Windows桌面运维----第五天

1、华为路由怎们配置IP、划分vlan、互通: 1、用户模式→系统模式; 2、进入相关端口,配置IP地址; 3、开通相应vlan,设置vlanX、IP地址; 4、绑定相关端口,设置端口类型; 5、电脑设置IP&#…...

bash和dash的区别(及示例)

什么是bash、dash Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。 GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接&#xff0…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键&#xff…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上

一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!

多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...

python可视化:俄乌战争时间线关键节点与深层原因

俄乌战争时间线可视化分析:关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一,自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具,系统分析这场战争的时间线、关键节点及其背后的深层原因,全面…...