monkey测试详解

article/2025/10/18 9:58:44

一、monkey测试的定义

  • Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;
  • 通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样,不知道程序的任何用户交互方面的知识,就对界面进行无目的、乱点乱按的操作;
  • Monkey 测试是一种为了测试软件的稳定性、健壮性的快速有效的方法;
  • Monkey 程序是 Android 系统自带的,由 Java 语言写成,在 Android 文件系统中的存放路是:
    /system/framework/monkey.jar;
  • Monkey.jar程序是通过Shell脚本来启动执行的,Shell脚本的存放路径在Android文件系统中:/system/bin/monkey;它的执行语句方式主要是:adb shell monkey {+命令参数}来进行Monkey测试。命令集可以通过{ adb shell monkey }来进行查看。

二、monkey测试前期准备

  1. 执行Monkey测试前,一定要确保屏幕处于解锁状态;
  2. 设置屏幕超时时间为最大时间(设置->显示->休眠->30分钟或者从不)。以防测试过程中手机锁屏,影响Monkey测试;
  3. 安装并配置好adb环境,打开usb调试,确保adb可以连接;
  4. 抓取log(monkey日志、系统日志、kernel日志等);
  5. 获取被测应用的包名。

三、monkey命令参数说明

格式:adb shell monkey + 行为参数 + “>” + {日志保存路径}

常规类命令
在这里插入图片描述
约束类命令
在这里插入图片描述
调试类命令
在这里插入图片描述
事件类命令
在这里插入图片描述
在这里插入图片描述

四、monkey日志分析整理

4.1 测试命令信息

此类信息流主要包括在monkey启动后输出的当前执行各种参数信息,其中主要包括:种子值(seed),事件数量,运行的应用列表,各种事件的百分比等。这部分日志信息解析主要如下所示:
// 测试命令信息
// 随机种子值,执行事件数量
:Monkey: seed=1617866276701 count=100000
// 可运行的应用列表
:AllowPackage: com.car300.activity
//Category 包含LAUNCHER 和MONKEY
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// 各事件的百分比
Event percentages:
// 触摸类事件占15%
0: 15.0%   事件0 :–pct-touch
// 手势类事件占10%
1: 10.0%   事件1 :–pct-motion
// 二指缩放类事件占2%
2: 2.0%   事件2 :–pct-pinchzoom
// 轨迹类事件占15%
3: 15.0%   事件3 :–pct-trackball
// 旋转类事件占0%
4: -0.0%   事件4 :–pct-rotation
// 基本导航类事件占25%
5: 25.0%   事件5 :–pct-nav
//主要导航栏类事件占15%
6: 15.0%   事件6 :–pct-majornav
//系统按键类事件占2%
7: 2.0%   事件7 :–pct-syskeys
//启动activity类事件占2%
8: 2.0%   事件8 :–pct-appswitch
//键盘类事件占1%
9: 1.0%   事件9 :–pct-flip
//其他事件类占13%
10: 13.0%   事件10 :–pct-anyevent

4.2 事件流信息

命令开始执行测试后,会依次输出相应执行的事件流信息,主要包括前面提到的事件。这部分日志信息解析主要如下所示:
// 执行的事件流信息
// 启动App 事件,或切换应用
:Switch:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.car300.activity/com.che300.toc.module.splash.SplashActivity;end
// 延时300毫秒(每一个事件之间的间隔时间)
Sleeping for 300 milliseconds
// 轨迹球事件(后面括号里面是表示点击的位置坐标)
:Sending Trackball (ACTION_MOVE) 0:(907.6482,501.939)
// 点击事件(后面括号里面是表示点击的位置坐标)
Sleeping for 300 milliseconds
:Sending Touch (ACTION_DOWN): 0:(338.0,676.0)
:Sending Touch (ACTION_UP): 0:(325.4063,658.7628)
// 按键输入事件
Sleeping for 300 milliseconds
:Sending Key (ACTION_DOWN): 135 // KEYCODE_F5
// 翻转屏幕事件
Sleeping for 300 milliseconds
:Sending rotation degree=3, persist=true
//其他事件

4.3 异常类型

a.程序无响应的问题:在日志中搜索“ANR”or“ANR Warning”;
b.异常问题:在日志中搜索“Exception”;
c.崩溃问题:在日志中搜索“crash”

Monkey在运行时输出信息包含一般四类,分别是测试命令信息、事件流信息、异常信息、执行结果信;

常见的异常类型
在这里插入图片描述

4.4 执行结果分析

当命令执行完所有事件后,会输出相应执行结果信息,其中包括执行的事件数量、旋转的角度、丢失等事件数量、网络状态以及 最终的执行结果。这部分日志信息解析主要如下所示:
在这里插入图片描述

// 执行的事件数量
Events injected: 100000
// 旋转的角度为0
:Sending rotation degree=0, persist=false
// 丢失的事件数量,按键0,提示0,轨迹球0,翻转0,旋转0
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
// 网络状态,移动网络 0ms ,Wi-Fi 0ms ,无网 144ms
## Network stats: elapsed time=9947108ms (0ms mobile, 0ms wifi, 9947108ms not connected)
// Monkey finished
 
如果执行过程中出现了异常导致执行失败,会输出对应的执行失败的原因,比如第几个事件执行失败以及所使用的随机种子数。这部分日志信息解析主要如下所示:
// 显示Monkey 执行失败
*\ * Monkey aborted due to error.
// 执行的事件数量
Events injected: 8
// 旋转的角度为0
:Sending rotation degree=0, persist=false
// 丢失的事件数量,按键0,提示0,轨迹球0,翻转0,旋转0
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
// 网络状态,移动网络 0ms,Wi-Fi 0ms,无网 405ms
## Network stats: elapsed time=405ms (0ms mobile, 0ms wifi, 405ms not connected)
// 提示在执行到第8 个事件时出现Crash ,以及所使用的随机种子值
** System appears to have crashed at event 8 of 10 using seed 1454215444564

备注

1、在monkey日志结尾处,可以通过对比Events injected的数量与设置的事件数量是否相等,来判断monkey脚本执行成功或失败;
2、在检测网络状态信息中,数字+ms not connected,其中数字反应的是monkey测试执行的时间;

五、抓取系统log

若在monkey测试过程中,遇到一些问题或异常中,可以抓取系统日志来进行分析;一般,在测试前双击执行下面的bat脚本来获取系统log,之后再去运行monkey脚本。
bat脚本代码如下:

adb devicesrem make sure all devices have different serial number
@echo off
set serial=
set /p serial=Enter device serial or only enter:if "%serial%"=="" (set cmd_adb=adbset cmd_fastboot=fastboot
) else (set cmd_adb=adb -s %serial%set cmd_fastboot=fastboot -s %serial%
):again
echo get root right
%cmd_adb% root
echo wait for device
%cmd_adb% wait-for-device
echo capture system log start at %date%_%time%
%cmd_adb% logcat tag:V -v time > system_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%.txt
echo device disappeared, wait for device again
%cmd_adb% wait-for-device
goto again
pause

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

相关文章

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…

常用的 kill 命令,来了解一下!

开发和运维&#xff0c;开发和测试基本上不分家。所以市面上存在很多的开发运维、运维开发、测试开发等岗位。如果你连 kill 命令都还不会&#xff0c;怎么好意思说你是一个合格的开发呢&#xff1f; 除了开发&#xff0c;工作或者生活当中&#xff0c;也存在着非常多的“异常程…

kill命令 和 kill函数

kill命令 kill命令是一个在Unix、Linux和类似系统中用于终止&#xff08;停止&#xff09;进程的命令。通过kill命令&#xff0c;可以向指定的进程发送一个信号&#xff0c;从而影响进程的运行状态。默认情况下&#xff0c;kill命令发送一个TERM信号&#xff0c;让进程优雅地退…

Linux 之 kill 命令

一. kill命令简介 在Linux系统中&#xff0c;kill命令用于向运行中的进程发送信号&#xff0c;默认发送的信号是终止信号&#xff0c;会请求进程退出。kill&#xff08;杀&#xff09;可能会引起误解&#xff0c;实际上发送的信号可能与杀死进程无关。 我们最常使用到的kill命令…

TR069 ACS

TR-069是由DSL论坛&#xff08;www.dslforum.org&#xff09;所开发的技术规范之一&#xff0c;其全称为“CPE广域网管理协议”。它提供了对下一代网络中家庭网络设备进行管理配置的通用框架和协议&#xff0c;用于从网络侧对家庭网络中的网关、路由器、机顶盒等设备进行远程集…

tr069 Cpe ACS 模拟器

完美支持tr069报文调试,支持反向链接,0 /1/2/4/等事件,支持信令&#xff0c;支持流程组合,支持PNP,告警等 文件下有config.ini,修改相关配置即可使用 支持批量开站心跳等. 版本历史: 1.0 增加业务网管开站 增加初始网管开站 1.1 优化 1.2 支持CWMP-ID 1.3 增加位置绑定 1.3…

基于TR069协议管理平台(XACS)多场景解决方案之一《TR069测试平台》

TR069测试平台(XACS) 为CPE设备TR069协议开发优化的版本&#xff0c;支持TR069协议基本操作&#xff0c;并可跟踪报文交互&#xff0c;适用于协议功能测试 1. TR069基本操作 支持TR069规范基本操作&#xff0c;GetRPCMethods, GetParameterValues, SetParameterValues, GetPar…