Monkey测试工具详解

article/2025/10/18 10:04:02

Monkey测试工具简介:

  • Monkey是Android SDK 中附带的一个工具;Monkey测试的原理:利用socket通讯(Android客户端和服务器以TCP/UDP方式)的方式来模拟用户的按键输入、触摸屏输入、手势输入等;
  • Monkey测试的目的:该工具可进行压力测试,更多的是一种随机测试和稳定性测试,测试安卓系统APP的健壮性和稳定性;

特征:

  • 测试的对象仅为应用程序包,有一定的局限性。
  • 可对MonkeyTest的对象、事件数量、类型、频率等进行设置
  • Monkey测试使用的事件流数据流是随机的,不能进行自定义。
    【如果需要自定义可以试试monkeyrunner工具,它是在工作站上通过API定义的特定命令和事件控制设备或模拟器。您可以写出一个Python程序去安装一个Android应用程序或测试包;运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。】

Monkey测试环境配置

1、下载AndroidSDK:https://android-sdk.en.softonic.com/

在这里插入图片描述
在这里插入图片描述
2、配置AndroidSDK环境变量:

path= F:\monkey\AndroidSDK_platform-tools

在这里插入图片描述
3、检查android-sdk配置是否正确,检查adb版本:

C:\Users\MECHREVO>adb –version

在这里插入图片描述
出来上图蓝色线的内容说明正确。

4、安装Mumu模拟器:http://mumu.163.com/

在这里插入图片描述
5、下载mumu后,安装的时候直接安装就好

在这里插入图片描述
在这里插入图片描述
6、安装成功后,打开mumu模拟器,然后在尝试连接mumu模拟器

7、打开dos窗口,输入以下命令

C:\Users\Administrator>adb devices	//查看已连接的设备
C:\Users\Administrator>adb connect 127.0.0.1:7555	//连接mumu模拟器
C:\Users\Administrator>adb devices	//查看mumu是否连接成功
//127.0.0.1:7555  device	出现这个说明连接成功

在这里插入图片描述
8、在网上随便下载了一个apk文件到本地

在这里插入图片描述
9、进行安装这个apk文件到模拟器

C:\Users\Administrator>adb install F:\monkey\demo.apk
Performing Push Install
F:\monkey\demo.apk: 1 file pushed. 7.3 MB/s (4743475 bytes in 0.618s)pkg: /data/local/tmp/demo.apk
SuccessC:\Users\Administrator>

在这里插入图片描述
如果最后提示‘Success’,说明安装成功。

如果在程序测试过程中,开发那边改完一阶段bug或一个严重程度级别很高的bug,我们在安装新的apk的时候不用去卸载原来的apk,只要重新安装的时候加上‘-r’参数覆盖掉原apk文件就好:

C:\Users\Administrator>adb install -r F:\monkey\demo.apk

10、在F:\monkey这个目录下创建一个目录,名为‘monkeylog’,用来保存monkey测试产生的日志文件,需要用日志文件进行分析问题。

执行Monkey测试

11、执行monkey测试,命令如下(操作事务都是随机的)

C:\Users\Administrator>adb shell monkey -p com.One.WoodenLetter -s 1599897777753 --throttle 300 -v -v -v 1000 > F:\monkey\monkeylog\mon1.txt

在这里插入图片描述
12、在包名的后面加上两个参数(操作事务只有点击和滑动事件)

C:\Users\Administrator>adb shell monkey -p com.One.WoodenLetter --pct-touch 70 --pct-motion 30 --throttle 300 -v -v -v 1000 > F:\monkey\monkeylog\mon6.txt

在这里插入图片描述
13、上面的命令中用到了–pct-touch和–pct-motion;

–pct-touch 70: ‘点击’事件占所有事件的70%
–pct-motion 30: ‘滑动’事件占所有事件的30%
//两个加起来是100,代表不会进行其他事件操作,如轨迹事件,导航事件等等,指定这两种操作后,就极大的降低了monkey点到被测app外面的概率(触发到音量键等系统按键)

-p: 指定包(指定测试的app)
–throttle: 两个事务间的时间间隔
-v -v -v: 日志输出等级3个v最高,1个v最低
1000: 操作事务次数1000次
> F:\monkey\monkeylog\mon6.txt: 产生的日志文件保存到mon6.txt文件里面

14、卸载apk需要先找到包名(卸载apk文件,或者直接在模拟器中卸载)

可先通过下面的命令列出所有的包,包都是以‘com’开头的

C:\Users\Administrator>adb shell pm list packages

在这里插入图片描述
列如上面安装的apk,它的包名是com.One.WoodenLetter

15、卸载com.One.WoodenLetter包,命令如下

C:\Users\Administrator>adb shell pm uninstall -k com.One.WoodenLetter

在这里插入图片描述
出来‘Success’说明卸载成功。

问题定位分析

  • 从日志中搜索:exception、crash、Fatal、ANR 这4个关键词。monkey的错误一般都是这4个,异常,崩溃,致命,程序终止。找到错误关键后,可以分析下错误发生前的操作步骤,便于手动重现错误。也可以将测试日志给安卓开发看,便于更快更准的定位问题。

  • 测试执行后打开测试日志,发现开头会有一个seed值,下次执行monkey测试的时候可以带上这个参数‘-s 1599897777753’,那么下次执行的时候会跟上一次的执行事务一样
    :Monkey: seed=1599897777753 count=1000

  • 测试日志中Event percentages事务百分比分别是什么事务
    不同版本的Android SDK的Event percentages种类数和顺序是不一样的!

0:–pct-touch//touch events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件)
1:–pct-motion//motion events
percentage手势事件百分比(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯
2:–pct-pinchzoom//pinch zoom events percentage二指缩放百分比,即智能机上的放大缩小手势操作
3:–pct-trackball//trackball events
percentage轨迹球事件百分比(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样)
4:–pct-rotation//screen rotation events percentage屏幕旋转百分比,横屏竖屏
5:–pct-nav//nav events
percentage”基本”导航事件百分比(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有
6:–pct-majornav//major nav events
percentage”主要”导航事件百分比(这些导航事件通常会引发UI的事件,例如5-way pad的中间键、回退键、菜单键)
7:–pct-syskeys//system(key) operations
percentage”系统”按钮事件百分比(这些按钮一般专供系统使用,如Home, Back, Start Call, End
Call,音量控制) 8:–pct-appswitch//app switch events
percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
9:–pct-flip//keyboard flip
percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
10:–pct-anyevent//anyevents
percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。

  • 测试执行结束后,打开日志最后查看最后5行信息

Events injected: 1000
//执行事务次数:1000次

:Sending rotation degree=0, persist=false
//对屏幕旋转事件的旋转度数=0,没有执行旋转事务

:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
//丢弃的数据包:键=0,指针=0,轨迹球=0,键盘点击=0,屏幕翻转=0

## Network stats: elapsed time=71424ms (0ms mobile, 0ms wifi, 71424ms not connected)
//网络统计信息:运行时间=71424ms(手机 0ms,wifi 0ms,未连接 71424ms)

// Monkey finished //monkey 测试结束

补充说明

  • 各个模拟器的连接端口

在这里插入图片描述

  • 也可以直接在模拟器里面直接添加apk文件,或应用中心下载,就不需要再dos中去安装了。

在这里插入图片描述

  • Monkey测试运行中的停止条件

1、如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。

2、如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错,例如app为强制更新或者app的运行环境被停止。

3、如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错

  • 在连接模拟器的时候如果出现了一些觉得应该不会出现的错误(如下图1),可以打开任务管理器,找到adb.exe进程右键结束进程重新打开cmd输入adb devices

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

命令详解

在这里插入图片描述

  • -p 指定要进行monkey测试的包,如果不使用参数,则会随机选择一个应用进行测试,也可以选中多个测试包一起运行
  • -c 指定activity的category类别,可以有多个
  • –throttle 设置每个事件结束后延迟多少时间再继续下一个事件,降低cpu压力;如果不设置,事件与事件之间将不会延迟,事件将会尽快生成;一般设置300ms,因为人最快300ms左右一个动作
  • -v 指定日志级别 -v level1 -v -v level2 -v -v -v level3,level3会输出最详细的日志信息
  • -s 伪随机的事件seed值,可以通过-s参数复现问题,不指定就会随机生成,日志中第一行会有
  • –ignore-crashes 忽略异常崩溃
  • –ignore-timeouts 忽略ANR(忽略应用无响应错误)
  • –ignore-security-exceptions 忽略一些许可错误,比如证书许可,网络许可
  • –monitor-native-crashes 监视并报告native(原生程序)层发送的崩溃错误
  • –ignore-native-crashes 忽略native(原生程序)层代码的崩溃错误
  • –kill-procress-after-error 用于在发送错误后杀死进程
  • –hprof 设置后,在Monkey事件序列之前和之后立即生产分析报告,保存于data/mic目录,不过将会生成大量几兆文件,谨慎使用
  • –pct-touch 设置触摸事件的百分比,即手指对屏幕进行点击抬起的动作
    例如‘–pct-touch 30%’
  • –pct-motion 设置移动(滑动)事件百分比,即点击屏幕,然后直线运动,最后抬起这种运动。
  • –pct-trackball 设置轨迹球事件百分比,这种事件类型是一个或者多个随机移动,包含点击事件,这里可以是曲线运动,不过现在手机很多不支持,这个参数不常用
  • –pct-syskeys 设置系统物理按键事件百分比,比如home键,音量键,返回键,拨打电话键,挂电话键等
  • –pct-nav 设置基本的导航按键事件百分比,比如输入设备上的上下左右四个方向键,不常用
  • –ptc-majornav 设置主导航事件的百分比
  • –pct-appswitch 设置monkey使用startActivity进行activity跳转事件的百分比,保证界面的覆盖情况
  • –pct-flip 键盘(手机键盘)事件主要是一些与键盘相关的操作的百分比。比如点击输入框、键盘弹起、点击输入框以外区域、键盘收回等,这里主要是键盘的打开和关闭操作
  • –ptc-anyevent 设置其它事件百分比
  • –pct-pinchzoom 调整缩放事件的百分比
  • –pct-permission 权限(替换掉了老版本中的–pct-rotation 屏幕旋转)
  • –pkg-blacklist-file 不去测试执行某个路劲下的程序包,–pkg-blacklist-file后面接的参数是apk文件的路径,查看某个包的路径:C:\Users\MECHREVO>adb shell pm list packages -f
    比如com.One.WoodenLetter包的位置在:
    /data/app/com.One.WoodenLetter-1/base.apk

在这里插入图片描述

  • –pkg-whitelist-file 设置白名单,即只执行的apk应用,作用和-p参数一样,注意,黑白名单只能设置其中一种,即不能同时既设置黑名单,又设置白名单,–pkg-whitelist-file后面接的是apk文件的路径,和上面一个一样
    adb shell monkey – pkg-whitelist-file /data/local/tmp/whitelist.txt --throttle 200 300 这个命令的意思就是 只跑白名单里面的应用,延迟200毫秒 执行300次
  • –wait-dbg 停止执行中的Monkey,直到有调试器和它相连接,后面可以不加参数值
  • –dbg-no-events 设置此选项,Monkey将执行初始启动,进入一个测试Activity,并不会在进一步生成事件。为了得到最佳结果,结合参数-v,一个或多个包的约束,以及一个保持Monkey运行30秒或更长时间的非零值,从而提供了一个可以监视应用程序所调用的包之间转换的环境
  • –port 为monkey开启专用端口。此时只monkey不会帮你乱点击,而此时你自己就是一只monkey了,在你乱点的时候,monkey会输出你点击后回馈的信息。如果你打完命令之后模拟器上没有启动你所要启动的包,你需要自己启动,但是你只能启动你-p中指定的那几个包。ctrl+c中断
  • –randomize-throttle 用这个参数必须与–throttle 绑定使用。用于在事件之间插入随机延迟,随机延迟范围为0到throttle设置的时间,单位为毫秒
    adb shell monkey -p com.One.WoodenLetter --throttle 500 --randomize-throttle 100
  • –bugreport 当ANR,系统无响应,Crash的时候获得bugreport,其实对应的是一个叫做bugreport的工具,可以运行adb bugreport观察,它提供了那个时刻系统非常多的信息,从meminfo,cpuinfo,vmstat到dmesg,buildprop等信息,多到想不到。有兴趣的,可以google
  • –periodic-bugreport 紧跟次数,按照配置的几次次数,生成几次bugreport
  • –permission-target-system 要配置–pct-permission参数一起使用,Android6.0及以后的手机才有这个参数(百分比的值)

用到的模拟器和AndroidSDK应用包

链接:https://pan.baidu.com/s/1eiX-PnkTaro5Z9amExromg
提取码:x34a

▩初出茅庐,如果有其他好的方法,欢迎留言 (ง •_•)ง


http://chatgpt.dhexx.cn/article/yq7hYow8.shtml

相关文章

Android Monkey测试

monkey通常用于对app进行压力测试,通过monkey工具在模拟器或设备中产生类似用户点击、触摸、手势等一些系统级的伪随机事件流以测试app的稳定性,这好比一只猴子随意操作设备。 一、monkey原理 monkey是一个用java编写的脚本,设备中存放在sy…

Monkey测试全过程

1.monkey测试的概念 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性…

Monkey测试(APP稳定性)

目录 1、Monkey简介 2、monkey程序介绍 3、Monkey测试前准备 4、Monkey测试命令 5、 Monkey测试结果(pass或者fail)的判断 6、Monkey Log的简单分析 7、汇总如图 1、Monkey简介 Monkey是Androld中的一个命令行工具,可以运行在模拟器里…

monkey 测试介绍

目录 前言 环境搭建 什么是Monkey Monkey 用来做什么 Monkey程序介绍 Monkey 架构 Monkey弱点 Monkey 参数大全 Monkey 命令 基本参数介绍 Monkey 实例 Monkey 查看包名 Monkey 日志分析 必须重视Crash 前言 Monkey 是Android SDK提供的一个命令行工具&#xff0…

一个简单的monkey测试工具

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

monkey测试详解

一、monkey测试的定义 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样&…

Monkey测试

一、什么是 Monkey 测试 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样&a…

使用Monkey进行软件测试(随机测试+脚本测试)

文章目录 一、基础概念二、monkey测试的优缺点2.1 优点2.2缺点2.3 解决方案2.3.1 二次开发2.3.2 指定测试页面2.3.3 调整各种事件的比例2.3.3 编写自定义测试脚本2.3.4 分析APP特性,选择合适的方案 三、monkey测试的基本过程3.1 环境准备3.1.1环境3.1.2 配置过程 3.…

【Monkey测试】Monkey测试详解

一、什么是 Monkey 测试 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样&a…

Linux 的 Kill -9命令

大家对kill -9 肯定非常熟悉,在工作中也经常用到。特别是你去重启tomcat时。 可是多半看来,我们对-9的理解只是表面而已。 很少有人(包括我)认真的去了解一下 kill -n 这个n到底是什么东东。自我批评一下。 好吧。我们来好好的认识…

kill进程.bat

输入端口号kill进程若出现中文乱码问题,则打开文件,点击另存为,将编码格式从UTF-8,改为ANSI,并将拓展名改为.bat,保存即可 echo off setlocal enabledelayedexpansion set /p port请输入端口号&#xff1…

shell中的kill命令

简介: 无论你使用哪种操作系统,你一定会遇到某个行为失常的应用,它把自己锁死并拒绝关闭。在Linux(还有Mac),你可以用一个"kill"命令强制终结它。在这个教程中,我们将展示给你多种方式使用"kill"…

Mysql的kill命令

在MySQL中有两个kill命令:一个是kill query 线程id,表示终止这个线程中正在执行的语句;一个是kill connection 线程id,这里connection可缺省,表示断开这个线程的连接,当然如果这个线程有语句正在执行&#…

kill与kill -9的区别

kill命令格式: kill -Signal pid pid是进程号,可以用 ps 命令查出 signal是发送给进程的信号, 默认参数下,kill 发送SIGTERM(15)信号给进程,告诉进程,你需要被关闭,请自…

Linux命令之终止进程kill

概述 kill 命令可以用来终止进程&#xff0c;即杀死某些进程。 语法 该命令的语法如下&#xff1a; kill [选项] 进程号该命令支持的选项有&#xff1a; 选项说明 -l <信息编号>若不加<信息编号>选项&#xff0c;则 -l 参数会列出全部的信息名称-a当处理当前进…

killall 、kill 、pkill 命令详解

转载地址&#xff1a;https://www.cnblogs.com/rsky/p/4886043.html killall 命令 Linux系统中的killall命令用于杀死指定名字的进程&#xff08;kill processes by name&#xff09;。我们可以使用kill命令杀死指定进程PID的进程&#xff0c;如果要找到我们需要杀死的进程&am…

kill命令详解kill -9、kill -15区别

kill相当于赐死&#xff0c;kill -9相当于斩立决 kill命令默认的信号就是15&#xff0c;也就是 kill -15 1.从help中可以清晰的看到 -n 指的是 信号编号 2.kill -l(查看Linux/Unix的信号变量) 3.说一下SIGKILL(kill -9)和SIGTERM(kill -15) kill -9 PID 是操作系统从内核级别…

Linux之kill命令

【Linux常用命令速查手册】关注【入门小站】&#xff0c;后台回复 「1001」 自取。 Linux中的kill命令用来终止指定的进程&#xff08;terminate a process&#xff09;的运行&#xff0c;是Linux下进程管理的常用命令。通常&#xff0c;终止一个前台进程可以使用CtrlC键&#…

(Linux)kill命令常用技巧

前言 在Linux的系统中&#xff0c;kill是我们最常见的命令之一。 kill&#xff0c;英语中为杀死的意思&#xff0c;顾名思义&#xff0c;就是用来杀死一些东西的命令&#xff0c;用来杀死系统中的进程。就像是Windows系统中的关闭软件的按钮或任务管理器的结束任务&#xff0c;…

Linux 进程kill -9 无法杀死解决方案

从下述案例中可以看到使用kill -9 28051并未将28051进程杀死 [rootiZufxxxxxxxxxxxx2tnZ devops-xxl-job]# kill -9 28051 [rootiZufxxxxxxxxxxxx2tnZ devops-xxl-job]# jps 28051 Launcher 29247 Jps [rootiZufxxxxxxxxxxxx2tnZ devops-xxl-job]# jps 28051 Launcher 29539 J…