Monkey

一、Monkey的概念

        “猴子测试”是指没有测试经验的人甚至对计算机根本不了解的人(就像猴子一样)不需要知道程序的任何用户交互方面的知识,如果给他一个程序,他就会针对他看到的界面进行操作,其操作是无目的的、乱点乱按的。

        这种测试方式在产品周期中的早期阶段会找到很多很好的bug,为用户节省不少的时间。

二、Monkey的介绍

        它是Android系统自带一个命令行工具,可以运行在模拟器里或者真机设备中运行。

        monkey向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。

三、monkey四大类

        1.基本配置选项,如设置尝试的事件数量。

        2.运行约束选项,如设置只对单独的一个包进行测试。

        3.事件类型和频率。

        4.调试选项

四、monkey命令特性

        不可能使用monkey来指定做一样测试,重复做很多次。因为monkey产生的是伪随机的事件流。但是我们可以通过添加命令选项将操作限制在一定的范围内。

五、搭建环境

        1.先下载jdk 具体安装流程请参考:https://blog.csdn.net/write6/article/details/79136388

        2.再下载sdk 具体安装流程请参考:https://blog.csdn.net/u011541946/article/details/77142045

        3.检验是否安装好-JDK和SDK

                windows+r 输入cmd进入dos命令行

                JDK:java -version

                SDK:adb

六、实际操作

        1.打开手机的开发者调试工具,用usb数据线链接手机或者使用模拟器

        2.windows+r 输入cmd进入dos命令行

        3.输入adb devices:查询序列号 出现类似下图的组合代表成功

        4. 输入adb shell连接手机

        或 adb -s 序列号 shell

        5.查询手机APP包名:adb shell pm list packages命令用法(未连接手机在查询APP包名输入命令需要带上adb shell、已连接手机查询手机APP包名直接输入pm list packages命令)

序号

命令

含义

1

adb shell pm list packages

查看当前连接设备或者虚拟机的所有包

2

adb shell pm list packages -s

只输出系统的包

3

adb shell pm list packages -3

输出所有第三方包

4

adb shell pm list packages -f

输出包和包相关联的文件(安装路径)

5

adb shell pm list packages -i

输出包和安装信息(安装来源)

6

adb shell pm list packages “baidi”

输出包含过滤条件的包

7

adb shell pm list packages -e

只输出启用的包

8

adb shell pm list packages -d

只输出禁用的包

9

adb shell pm list packages -u

只输出包和未安装包信息(安装来源)

10

adb shell pm path packages

定位apk所在系统路径

11

adb pull <remote> [<local>]

从手机把apk pull下来

12

adb shell pm list packages --user <USER_ID>

根据用户id查询用户的空间的所有包,<USER_ID>代表当前连接设备的顺序,从零开始

        6.对包操作

1. 首先用一个最简单的mokey去试着找哪个是你想要的安装包名称

        -p参数:表示指定测试的程序(空格后面跟安装包名字,拿刚才的第三方安装包一个个试)

        -v参数:表示查看monkey执行过程的信息(日志级别)(-v 越多越详细,最多三个)

数字100:表示测试事件数为100

序号

命令

含义

1

adb shell monkey -p tv.danmaku.bili 100

指定一个包

2

adb shell monkey -p tv.danmaku.bili -p com.baidu.searchbox 100

指定多个包

3

adb shell monkey -v 100

不指定包

4

adb shell "ps | grep com.baidu.searchbox"

获取进程ID

5

adb shell ps

查看所有进程

6

adb shell dumpsys meminfo 包名,或者进程id

查看某个进程的内存占用情况

7

kill -9 进程ID

杀死进程

8

exit

退出 shell

2.adb shell monkey -p tv.danmaku.bili -v 50 向b站发起随机点击50次

                结果图:

Event percentages(事件百分比):

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

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

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

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

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

5:暂时不知道这个是什么

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

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

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

9:Activity启动事件百分比,参数--pct-appswitch

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

11:其他事件百分比,参数--pct-anyevent

3.尽管monkey产生是伪随机事件流,但是我们希望我们的操作有一定的规律性,即按键、触屏等各类事件操作有所偏重

        (1).对文本框操作,需要更多的按键操作。

        (2).玩游戏,需要更多的点击和滑动操作。

序号
1

--throttle

设定两个事件之间一个固定延迟,可以减缓monkey的执行速度

如果不指定,monkey将不会被延迟,事件将尽可能快地生成和发送消息。单位:毫秒

adb shell monkey --throttle 2000 -p tv.danmaku.bili 50

向B站发送50次随机事件,每次事件间隔为2秒

2

--pct-touch

设定触屏事件生成的百分比。

触屏事件是一个有手指按下,抬起事件的手势

adb shell monkey --throttle 2000 --pct-touch 20 -p tv.danmaku.bili 50

向B站发送50次随机事件,每次事件间隔为2秒。其中设定触屏的事件占比为20%

3

--pct-motion

设定滑动事件生成的百分比。

滑动事件是一个先在某一个位置手指按下,滑动一段距离后再抬起手指的手势

adb shell monkey --throttle 2000 --pct-motion 20 -p tv.danmaku.bili 50

向B站发送50次随机事件,每次事件间隔为2秒。其中设定滑动的事件占比为20%

4

--pct-trackball

设定轨迹球事件生成的百分比。

轨迹球事件是包含一系列随机移动和单击事件的事件

adb shell monkey --throttle 2000 --pct-trackball 20 -p tv.danmaku.bili 50

向B站发送50次随机事件,每次事件间隔为2秒。其中设定轨迹球的事件占比为20%

5

--pct-nav

设定基本导航事件生成的百分比。

基本导航事件是模拟方向性在设备上输入向上、向下、向左、向右的事件。

adb shell monkey --throttle 2000 --pct-nav 40 -p tv.danmaku.bili 50

向B站发送50次随机事件,每次事件间隔为2秒。其中设定基本导航事件的占比为40%。

monkety

6

--pct-majornav

设定主要导航事件生成的百分比。

主要导航事件通常会导致UI产生回馈信息,如单击Back键、Home键、Menu键等

adb shell monkey --throttle 2000 --pct-majornav 30 -p tv.danmaku.bili 50

向B站发送50次随机事件,每次事件间隔为2秒。其中设定主要导航事件的占比为30%

7

--hprof

指定了该参数,Monkey会在发送事件序列的前、后,生成性能分析报告。

通常会在data/misc目录下生成一个5MB左右大小的文件

8

--ignore-crashes

通常情况下,当应用程序发生任何超时错误(application not responding)时,monkey将停止运行。若指定了该参数,则monkey将会在产生错误信息后,继续向系统发送事件,直到指定事件全部运行完毕

9

--ignore-security-exceptions

通常情况下,指定应用程序发生许可错误时(如证书许可,网络许可等),monkey将停止运行。

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

adb shell monkey --throttle 2000 --pct-trackball 50 -p tv.danmaku.bili 50 --ignore-security-exceptions 50

10

--ignore-timeouts

忽略响应超时,ANR

11

--ignore-native-crashes

忽略本地代码崩溃

12

--monitor-native-crashes

监视崩溃时的本地代码

4.对单独的APP进行测试

monkey -p tv.danmaku.bili --throttle 500 -s 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 200>/mnt/sdcard/monkey.txt

说明:

--throttle(毫秒)事件之间插入的固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定,Monkey将尽可能快的产生并执行事件。

-s 用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。

--ignore-crashes 忽略程序崩溃。设置此选项后,Monkey会执行完所有的事件,不会因crash而停止。

--ignore-timeouts 忽略程序无响应。设置此选项后,Monkey会执行完所有的事件,不会因ANR而停止。

--ignore-security-exceptions 忽略证书或认证异常。设置此选项后,Monkey会执行完所有的事件,不会因认证或证书异常而停止。

--ignore-native-crashes 监视系统中本地代码发生的崩溃

--monitor-native-crashes 忽略本地代码导致的崩溃。设置忽略后,Monkey将执行完所有的事件,不会因此停止。

-v -v –v 提供最详细的设置信息

5.导出log到电脑

adb pull /mnt/sdcard/monkey.txt d:monkey.txt

6.分析log

日志开头:显示本次测试seed值,执行次数,测试包,

日志结尾:

如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;Monkey finished代表执行完成。(如果Monkey执行中断,在log的最后也能查看到当前已执行的次数。)

日志内容分析

一般测试结果分析-搜索关键字:

1.程序无响应,ANR问题:在日志中搜索“ANR”

2.崩溃问题:在日志中搜索“CRASH”

3.其他问题:在日志中搜索”Exception”

详细分析monkey日志

Switch--查看log中的Switch,主要是查看Monkey执行的是那一个Activity,两个swtich之间如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。

Sleeping--Sleeping for 500 milliseconds这是执行Monkey测试时,throttle设定的间隔时间,每出现一次,就代表一个事件。

重现问题

Monkey测试出现错误后,一般的查错步骤为以下几步:

1.找到是monkey里面的哪个地方出错

2.查看Monkey里面出错前的一些事件动作,并手动执行该动作

3.若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样

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

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

相关文章

scrapy爬虫中间件和下载中间件的使用

一、关于中间件 之前文章说过&#xff0c;scrapy有两种中间件&#xff1a;爬虫中间件和下载中间件&#xff0c;他们的作用时间和位置都不一样&#xff0c;具体区别如下&#xff1a; 爬虫中间件&#xff08;Spider Middleware&#xff09; 作用&#xff1a; 爬虫中间件主要负…

用 CloudCanal 快速验证阿里云 EMR for StarRocks 和 Doris

背景 StarRocks 和 Doris 是近两年来相当流行的、国产的、开源的实时数仓&#xff0c;不仅数据检索、分析能力出众&#xff0c;而且数据准备实时性好、准确度高、使用丝滑&#xff0c;可如同在线数据库般使用。 CloudCanal 在早期即支持此两种实时数仓&#xff0c;并且经过多…

JavaScript 内存泄漏的检测与防范:让你的程序更稳定

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

.netcore 操作aspose.words导出pdf

个人重点关注的是生成曲线图的部分&#xff0c;浪费了我很多时间 chart.Legend.Position LegendPosition.Top; 控制图形的显示位置&#xff0c;这个地方好像必须要选一个位置&#xff0c;否则会内容显示不全&#xff0c;我开始用的LegendPosition.None&#xff0c;他就显示…

京东数据运营-京东数据开放平台-鲸参谋10月粮油调味市场品牌店铺销售数据分析

鲸参谋监测的京东平台10月份料油调味市场销售数据已出炉&#xff01; 根据鲸参谋数据显示&#xff0c;今年10月份&#xff0c;京东平台粮油调味市场的销量将近4600万&#xff0c;环比增长约10%&#xff0c;同比降低约20%&#xff1b;销售额将近19亿&#xff0c;环比增长约4%&am…

VT-VRPA2-1-1X/V0/T5控制4WRE6比例方向阀放大板

带阀芯位移反馈不带集成式放大器比例方向阀控制放大器&#xff0c;替代力士乐同型号产品&#xff0c;可以完全互换使用&#xff1b;适用于控制力士乐系列带电位置反馈的4WRE6通径和4WRE10通径2X系列比例方向阀&#xff1b;0~10V、4~20mA指令控制信号任意可选&#xff1b;直接安…

Docker 镜像及其命令

文章目录 镜像Docker 镜像加载原理联合文件系统bootfs和rootfs镜像分层 镜像分层的优势容器层常用命令 镜像 镜像是一种轻量级、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好形成一个可交付的运行环境&#xff…

cmake和vscode 下的cmake的使用详解(二)

第四讲&#xff1a; GDB 调试器 前言&#xff1a; GDB(GNU Debugger) 是一个用来 调试 C/C 程序 的功能强大的 调试器 &#xff0c;是 Linux 系统开发 C/C 最常用的调试器 程序员可以 使用 GDB 来跟踪程序中的错误 &#xff0c;从而减少程序员的工作量。 Linux 开发 C/C …

SQL Sever 基础知识 - 限制行数

SQL Sever 基础知识 - 三、限制行数 三、限制行数第1节 OFFSET FETCH - 限制查询返回的行数1.1 OFFSET 和 FETCH 子句1.2 SQL Server OFFSET 和 FETCH 示例 第2节 SELECT TOP - 限制查询结果集中返回的行数或行的百分比2.1 SELECT TOP 子句2.2 PERCENT2.3 WITH TIES2.4 SELECT …

Excel导入操作

<template><el-dialogwidth"500px"title"员工导入":visible"showExcelDialog"close"$emit(update:showExcelDialog, false)"><el-row type"flex" justify"center"><div class"upload-e…

计算机毕业设计 基于SpringBoot的敬老院管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

计算机视觉(OpenCV+TensorFlow)

计算机视觉&#xff08;OpenCVTensorFlow&#xff09; 文章目录 计算机视觉&#xff08;OpenCVTensorFlow&#xff09;前言7. 图像直方图绘制直方图绘制直方图有两种方式&#xff1a; 掩膜 8. 直方图均衡化直方图均衡化的介绍直方图均衡化的步骤自适应直方图均衡化 9. 图像转换…