monkey测试详解

一、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 devices

rem 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=adb
	set 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
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Monkey测试是一种用于对正在开发的Android应用程序进行压力测试的工具。它可以通过发送伪随机的用户事件流来模拟用户的操作。以下是一个简单的Monkey测试教程: 1. 安装Android SDK:首先,您需要安装Android SDK,并确保adb工具可用于与Android设备通信。 2. 连接设备:将Android设备通过USB连接到计算机,并确保设备已开启USB调试模式。 3. 打开终端或命令行窗口:在计算机上打开终端或命令行窗口,进入Android SDK的platform-tools目录。 4. 启动Monkey测试:执行以下命令来启动Monkey测试: ``` adb shell monkey [选项 <事件数量> ``` 5. 配置选项:根据需要添加命令选项来配置Monkey测试的行为。例如,您可以使用`-p`选项指定要测试的应用程序包名,使用`--throttle`选项设置事件之间的延迟时间等。 6. 运行测试:执行命令后,Monkey将开始发送伪随机的用户事件流到目标应用程序。您可以在设备上观察应用程序的行为,并监控其性能和稳定性。 请注意,Monkey测试是基于伪随机事件的,因此无法完全重复相同的测试。但是,通过限制事件范围和添加其他命令选项,您可以将测试限制在特定的范围内,以便进行更有针对性的测试。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Monkey测试详解](https://blog.csdn.net/weixin_49043031/article/details/107210575)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆鳞_Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值