软件测试——稳定性测试: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的参数没有顺序要求,但是随机事件数是一定要放在最后的!!!

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

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

相关文章

electron自定义标题栏的最大化,最小化,关闭窗口

渲染组件代码&#xff1a; <template><div class"window-btn"><i class"minimize" click"minimize"><img src"../assets/img/最小化.svg" alt"最小化" /></i><i v-if"!isMaximized&…

react 0至1 案例

/*** 导航 Tab 的渲染和操作** 1. 渲染导航 Tab 和高亮* 2. 评论列表排序* 最热 > 喜欢数量降序* 最新 > 创建时间降序* 1.点击记录当前type* 2.通过记录type和当前list中的type 匹配*/ import ./App.scss import avatar from ./images/bozai.png import {useState} …

肾虚学习实验第T1周:实现mnist手写数字识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 作为一名研究牲&#xff0…

树和二叉树的定义

目录 一、树的定义 1.1概念 1.2表示方式 1.3基本术语 1.4树结构和线性结构的比较 二、二叉树的定义 2.1概念 2.2二叉树的5种基本形态 三、二叉树的性质和存储结构 3.1二叉树的性质 3.1.1满二叉树 3.1.2完全二叉树 3.2二叉树的存储结构 3.2.1二叉树的顺序存储 3.2.…

海量数据处理——bitMap/BloomFilter、hash + 统计 + 堆/归并/快排

前言&#xff1a;海量数据处理是面试中一道常考的问题&#xff0c; 生活中也容易遇到这种问题。 通常就是有一个大文件&#xff0c; 让我们对这个文件进行一系列操作——找出现次数最多的数据、求交集、是否重复出现等等。 因为文件的内容太多&#xff0c; 我们的内存通常是放不…

目标跟踪算法(bytetrack)-tensorrt部署教程

一、本机安装python环境 conda create -n bytetrace_env python=3.8 activate bytetrace_env conda install pytorch torchvision cudatoolkit=10.1 -c检测GPU是否可用,不可用不行 import torch print(torch.cuda.is_available())安装bytetrack git clone https://github.c…

ELK Kibana搜索框模糊搜索包含不包含

默认是KQL,点击切换Lucene搜索&#xff0c;搜索日志中包含Exception关键字&#xff0c;不包含BizException、IllegalArgumentException、DATA_SYNC_EXCEPTION关键字的日志&#xff0c;如下&#xff1a; message: *Exception AND !(message : *BizException OR message : *Ille…

数据库复习——模式分解

模式分解这边主要包括无损分解和保持函数依赖的分解两种形式&#xff0c;简单整理一下。 无损分解 把一个 R R R 分成 ρ { R 1 , R 2 , ⋯ , R k } \rho \{R_1,R_2,\cdots,R_k\} ρ{R1​,R2​,⋯,Rk​}&#xff0c;然后通过自然连接 R 1 ⋈ R 2 ⋈ ⋯ ⋈ R k R_1\bowtie R…

容器之布局容器的演示

代码; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>void change_image(GtkFileChooserButton *filebutton, // GdkEvent *event,GtkImage *image) {gtk_image_set_from_file(im…

鸿蒙开发通信与连接:【@ohos.wifiext (WLAN)】

WLAN 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 该文档中的接口只供非通用类型产品使用&#xff0c;如路由器等&#xff0c;对于常规类型产品&#xff0c;不应该使用这些接口。 导入模块 …

手写方法实现整型例如:123与字符串例如:“123“相互转化(下篇)

目录 一、前言 二、整型转化为字符串 1. 初始化变量 2.数字1转字符1 3.取出value中的每一项数字 4.将字符放入字符数组中 5.最终代码 三、最后 一、前言 本篇文章紧跟上篇文章&#xff0c;本片内容为整型转化为字符串类型。至于我为什么要分两篇文章&#xff0c;主要…

艺术创作加速器:三款AI绘画软件,让你的工作效率倍增!

在数字化浪潮的推动下&#xff0c;艺术创作正迎来革命性的变化。AI绘画软件的出现&#xff0c;不仅为艺术家提供了全新的创作工具&#xff0c;也为艺术爱好者开辟了一片创意的新天地。这些软件利用人工智能技术&#xff0c;根据用户的简单描述或草图&#xff0c;快速生成独特的…

视频汇聚安防综合管理系统EasyCVR平台GB28181设备注册未上线的原因排查与解决

视频汇聚安防综合管理平台EasyCVR视频监控系统基于云边端架构&#xff0c;可支持海量视频汇聚集中管理&#xff0c;能提供视频监控直播、云端录像、云存储、录像检索与回看、告警&#xff08;协议告警/智能告警/1400视图库告警&#xff09;、平台级联、AI智能分析接入等视频能力…

从艳彩山水到艳彩艺术 薛永年:郭泰来艳彩艺术填补了中国美术史的空白

薛永年先生 自6月12日开展以来&#xff0c;郭泰来现代艺术大展杭州如火如荼地进行着&#xff0c;吸引了众多艺术爱好者和专业人士前往。毫不夸张地说&#xff0c;总统和清洁工人都能在他的作品中找到自己心中的那一块共振带并与之产生强烈的共鸣&#xff0c;这便是郭泰来先生的…

矩阵中严格递增的单元格数

题目链接&#xff1a;leetcode:矩阵中严格递增的单元格数 描述 给你一个下标从 1 开始、大小为 m x n 的整数矩阵 mat&#xff0c;你可以选择任一单元格作为 起始单元格 。 从起始单元格出发&#xff0c;你可以移动到 同一行或同一列 中的任何其他单元格&#xff0c;但前提是目…

【JavaEE进阶】Spring统一功能处理:拦截器的使用

目录 1.什么是拦截器? 2.拦截器的使用 2.1定义拦截器 2.2 注册配置拦截器 3.拦截器详解 3.1 拦截路径 3.2 拦截器的执行流程 4. 使用拦截器实现登录校验 4.1 定义拦截器 4.2 注册配置拦截器 1.什么是拦截器? 拦截器是Spring框架提供的核心功能之⼀, 主要用来拦截用…

AI赋能前端:你的Chrome 控制台需要AI(爱)

像会永生那样去学习,像明天就要死亡那样去生活。——圣雄甘地 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder 此篇文章所涉及到的技术有 AI(Gemini)ChromeDevTool🪜魔法接码平台因为,行文字数所限,有些概念可能会一带而过亦或者提供对应的学习…

[【机器学习】深度概率模型(DPM)原理和文本分类实践

1.引言 1.1.DPM模型简介 深度概率模型&#xff08;Deep Probabilistic Models&#xff09; 是结合了深度学习和概率论的一类模型。这类模型通过使用深度学习架构&#xff08;如神经网络&#xff09;来构建复杂的概率分布&#xff0c;从而能够处理不确定性并进行预测。深度概率…

刘亦菲新剧玫瑰的故事

刘亦菲新剧《玫瑰的故事》&#xff1a;开放结局&#xff0c;无限遐想 当刘亦菲再次踏入荧屏&#xff0c;与导演汪俊携手打造的《玫瑰的故事》便引发了无数观众的期待与关注。这部剧不仅汇聚了众多实力派演员&#xff0c;更以其独特的剧情和精致的制作成为了近期热门的话题。《…

网络编程(TCP协议,UDP协议)

目录 网络编程三要素 IP IPv4 InetAddress类 端口号 协议 UDP协议 UDP协议发送数据 UDP协议接收数据 UDP的三种通信方式(代码实现) TCP协议 TCP通信程序 三次握手和四次挥手 练习 1、客户端:多次发送数据服务器:接收多次接收数据&#xff0c;并打印 2、客户端…