【APP测试-完结】05-App专项测试-ADB连接真机+Monkey测试

本文为个人学习整理笔记,仅用于技术交流与学习分享


Monkey测试?为什么会叫这个名字?Monkey是不是猴子🐒吗?😂

是这样滴:😊因为这个测试工具是随机乱点、乱滑、乱按,行为跟一只发疯乱敲的猴子一模一样,所以就叫 Monkey 测试。


一、ADB连接真机

1、USB连接(插线版)

  1. 拿手机数据线,一头插手机,一头插电脑USB口
  2. 手机里打开「开发者选项」,把「USB调试」开关打开(找不到开发者选项?去「设置-关于手机」,狂点7次「版本号」就出来了)

打开开发者选项

打开usb调试

  1. 电脑打开cmd命令提示符,输入 adb devices 回车
  2. 只要跳出一串设备号+device,就说明连好了!电脑现在能控制你手机了

2、WiFi连接(无线版)

  1. 先按上面USB的方法,用数据线把手机和电脑连好,确保adb devices能看到设备(这一步是"激活"无线功能,必须先插线)
  2. 电脑cmd里输入 adb tcpip 5555 回车(给手机开个专门的无线连接端口5555)
  3. 现在可以把数据线拔掉了!
  4. 去手机「设置-关于手机-状态信息」,找到手机的WiFi IP地址(比如 192.168.1.100
  5. 电脑cmd里输入 adb connect 你手机的IP:5555(比如 adb connect 192.168.1.100:5555)回车
  6. 跳出 connected to xxx:5555,再输adb devices能看到IP+端口,就说明无线连好了!以后不用插线,电脑也能控制手机

二、为什么进行Monkey

它其实是一种压力测试。

Monkey 测试就是让系统自动乱点、乱滑、乱输 ,模拟用户疯狂、无规律地使用 APP,用来做压力测试 + 稳定性测试

主要目的就这几个:

  1. 看 APP 会不会崩溃(Crash)

    正常手动点很难测出来的隐藏 Bug,让 Monkey 疯狂乱点,很容易把程序点崩,提前发现问题。

  2. 看 APP 会不会卡死、无响应(ANR)

    长时间、高强度乱操作,考验 APP 扛不扛造,会不会卡死不动。

  3. 快速做压力测试

    不用人一直点,让程序自动跑几小时甚至几天,模拟大量用户、长时间使用的场景,检验稳定性。

  4. 在版本上线前快速扫雷

    作为基础兜底测试,保证 APP 不会一用就崩,提高用户体验。


我们什么场景下会用这个monkey测试呢?

  1. 用户使用人数比较多
  2. 用户使用时间比较长

三、什么是Monkey测试

Monkey测试是压力测试,也是稳定性测试,而且它是基于安卓的自动化测试的一种手段。它并不能测试我们的IOS。就是模拟用户的按键输入,手势输入,看被测app在多长时间会有异常。

执行Monkey测试的阶段是什么阶段?

项目基本稳定的情况下,项目验收前我们需要执行Monkey测试


四、Monkey工具的安装

Monkey工具的安装参照下述内容👇

Monkey 测试必须安装的工具

Monkey 运行依赖 JDK + Android SDK + 模拟器(夜神)

  1. JDK(运行 Java 环境,adb、monkey 都依赖它)
  2. Android SDK (自带 adb + monkey 工具本体)
  3. 安卓设备/模拟器(这里用夜神模拟器)

对于sdk和夜神模拟器我们在之前安装过了课参考如下👇:
adb环境


我们先在只需安装jdlk即可

  • adb、monkey 都是 Java 编写的
  • 没装 JDK → 环境跑不起来 / 命令报错

建议用 JDK 8 (最稳定,适配 adb、monkey)

官网下载(选 Windows x64 安装包):
https://www.oracle.com/java/technologies/downloads/#java8-windows

找不到也可以直接搜:jdk 8 windows x64 安装版

安装 JDK

  1. 双击安装包

  2. 一路 下一步

  3. 记住安装路径(默认一般是)

    复制代码
    C:\Program Files\Java\jdk1.8.0_xxx

    后面配置环境变量要用。

配置环境变量

  1. 右键 此电脑 → 属性 → 高级系统设置 → 环境变量
  2. 在下面 系统变量 里操作:

新建 JAVA_HOME

  • 变量名:JAVA_HOME

  • 变量值:填你上面的 JDK 安装路径
    例如:

    复制代码
    C:\Program Files\Java\jdk1.8.0_301

编辑 Path

找到系统变量里的 Path → 编辑 → 新建 2 条:

复制代码
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin

新建 CLASSPATH(必须加前面的点)

  • 变量名:CLASSPATH

  • 变量值:

    复制代码
    .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

验证是否成功

打开 cmd,输入:

bash 复制代码
java -version

出现版本号类似下面就成功:

复制代码
java version "1.8.0_301"
Java(TM) SE Runtime Environment ...

五、如何进行Monkey测试

我们是基于adp命令执行monkey测试的。

回顾知识

  1. Monkey 是干什么的?
    Monkey = 一只乱点屏幕的猴子

    它不听指挥,随机乱点、乱滑、乱按按键 ,专门帮你把 APP 里藏得很深的崩溃、卡死给测出来。

    测试人员用它做压力测试、稳定性测试

  2. 一个包名 = 一个 APP

    包名就是 APP 在安卓里的唯一身份证

  • 你测哪个 APP,就用哪个 APP 的包名
  • 命令里写 -p 包名 = 只测这一个 APP,不碰别的软件

1、先连设备(第一步!)

  1. 打开夜神模拟器 / 插上手机
  2. 开启开发者选项、USB调试
  3. 电脑 cmd 里输入:

连接夜神

bash 复制代码
adb connect 127.0.0.1:62001
bash 复制代码
adb devices

看到下面这种,才叫连上了:

复制代码
List of devices attached
127.0.0.1:62001   device
  • 出现 device → 可以执行 monkey
  • 没出现 → 命令敲烂了也没用

2、再查包名

bash 复制代码
adb shell pm list packages

3、再执行 monkey 命令

monkey 测试的命令格式:
adb shell monkey 可选参数 事件数

4、可选参数的意思

4.1. -p 包名

指定要测试的 APP,一个 -p 对应一个 APP。

4.2. --ignore-crashes

忽略崩溃,APP 崩了继续测,不中断。

4.3. --ignore-timeouts

忽略 ANR(APP 卡死无响应),继续测。

4.4. --ignore-security-exceptions

忽略安全证书、权限异常。

4.5. -s 种子值

两次用相同的 -s 数字,操作顺序一模一样,方便复现 BUG。

4.6. -v

日志级别:

  • -v:简单日志
  • -v -v:更详细
  • -v -v -v:最详细日志

4.7. --throttle 毫秒

每个事件之间延时,单位毫秒。

行业通用:450 毫秒


5、最核心:Monkey 命令格式

标准格式

text 复制代码
adb shell monkey [-p 包名] 参数[可以是多个] 事件数
  • adb shell:进入手机系统
  • monkey:启动猴子工具
  • -p 包名:指定你测的app
  • 参数:控制猴子怎么乱点
  • 事件数:让猴子点多少次

6、必背 5 条常用命令(直接复制改一改就能用)

6.1. 最简单:整机乱点 500 次

复制代码
adb shell monkey 500

作用:手机所有界面乱点 500 下,练手用。

截图:


6.2. 只测你自己的 APP(最常用!)

复制代码
adb shell monkey -p 包名 500

查包名

bash 复制代码
adb shell pm list packages

测试对应包示例:

复制代码
adb shell monkey -p com.android.browser 500

只测浏览器,不乱点别的。【注意我们只能测有界面的 APP,阿卓系统底层的我们测不了】


我们卡住了

中断就导致后面的测不了,所以我们接下来看我们测试的时候如何忽略异常

6.3. 忽略崩溃、卡死、安全证书,让猴子一直测

复制代码
adb shell monkey -p 包名 
--ignore-crashes 
--ignore-timeouts 
--ignore-security-exceptions
500

翻译:

  • --ignore-crashes:APP 崩了继续测
  • --ignore-timeouts:APP 卡死(ANR)继续测
  • --ignore-security-exceptions:忽略安全证书、权限异常。

6.4. 加延时:让猴子点慢一点

复制代码
adb shell monkey -p 包名 
--throttle 450 
500
  • --throttle 450:每点一次停 450 毫秒
    太快手机会卡死,行业通用 450ms
    设置延时的单位是为毫秒的,我们一般设置为450毫秒。

6.5. 看详细日志 + 固定操作轨迹

复制代码
adb shell monkey -p 包名 
-s 123 
-v -v -v 
--throttle 450 
500
  • -s 123:seed种子值,下次用同样数字,猴子操作顺序一模一样(方便复现)比如两次monkey测试执行的相同seed值,那么就表示操作的动作是一样的,但是操作的界面及对象不能确定一样。
  • -v -v -v:-v代表日志的级别程度,-v越多,日志最详细,方便找BUG

7、夜间压测命令

我们下班前跑,第二天看结果,这是稳定测试命令

进行Monkey测试的时候,我们如何进行分析呢,一般我们在下班后进行 monkey测试的执行,然后第2天回来看结果,那么设置多少个事件数,延长时间为多少合适呢?

😊我们一般事件数设置为35万,延时设置为450毫秒。

复制代码
adb shell monkey 
-p com.你的包名 
--ignore-crashes 
--ignore-timeouts 
--ignore-security-exceptions 
--throttle 450 
-s 666 
-v -v -v 
350000

格式完全是:adb shell monkey -p 包名 参数[可以是多个] 事件数

说明:

  • 350000 次事件(350000)
  • 每次间隔 450ms(--throttle)
  • 忽略崩溃、ANR、证书安全异常(--ignore-crashes 和--ignore-timeouts和--ignore-security-exceptions )
  • 带种子、带详细日志(-s和-v)
    跑一晚上完全没问题。

8、怎么看结果?【结果分析】

只看最后一行!

前提你要加日志,不加 -v,日志级别太低,系统根本不打印最后那句 Monkey finished!

加日志之后:

  1. 出现 Monkey finished

    ✅ 测试通过,没出致命问题

    例如:

  2. 没出现这句话,中途断了

    ❌ 出问题了,要提BUG

常见问题

  • 出现 Crash:APP 崩了
  • 出现 ANR:APP 卡死无响应
  • 手机重启、关机
  • 命令直接断掉、闪退

这些全是 BUG


9、最重要:测出来问题,怎么提BUG?

提交到禅道

注意我们进行monkey测试提交bug的时候,bug的标题中需要加入monkey测试出现 bug的类型,如下👇

BUG 标题格式

复制代码
【Monkey测试】APP出现XXX类型Bug

示例:

  • 【Monkey测试】APP出现Crash崩溃
  • 【Monkey测试】点击过程中出现ANR
  • 【Monkey测试】执行过程中手机自动重启

BUG 内容模板

复现步骤:

  1. 连接手机,执行 Monkey 命令 或者 连接夜神模拟器,执行 Monkey 命令

  2. 命令如下:

    (把你跑的命令粘贴过来)

  3. 执行过程中出现异常

测试结果:

出现 XXX(Crash/ANR/重启/闪退)

日志截图:

(贴日志截图)

手机信息:

品牌型号 + 系统版本

预期结果:

Monkey 执行完成,显示 Monkey finished

实际结果:

出现 XXX 异常,中断执行


10、最容易踩的 4 个坑

  1. 不加 --throttle

    → 手机直接卡死、发热、测不下去

  2. 不加忽略异常

    → 一崩就停,测不了多久

  3. 事件数写太大

    → 新手先从 500、1000 开始练

  4. 不知道包名

    → 用 adb shell pm list packages


至此,我们关于 App 测试相关的笔记就整理完毕了,App 测试阶段也暂时告一段落。感谢大家一路以来的陪伴与支持,本期内容到此结束,最后,如果觉得笔记对你有用,记得给小特点赞+关注哦~

我们下期再会~🎉👋

相关推荐
STER labo18 小时前
mysql配置环境变量——(‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法)
数据库·mysql·adb
sjmaysee1 天前
CentOS7安装Mysql5.7(ARM64架构)
adb·架构
AtOR CUES1 天前
MySQL——表操作及查询
android·mysql·adb
mOok ONSC2 天前
mysql9.0windows安装
windows·adb
xxjj998a2 天前
Laravel8.x核心特性详解
数据库·mysql·adb
TeDi TIVE2 天前
Linux下MySQL的简单使用
linux·mysql·adb
TeDi TIVE2 天前
MySQL四种备份表的方式
mysql·adb·oracle
rleS IONS2 天前
Linux系统离线部署MySQL详细教程(带每步骤图文教程)
linux·mysql·adb
计算机安禾2 天前
【Linux从入门到精通】第40篇:LAMP/LNMP环境一键部署脚本实战
android·linux·adb
xxjj998a2 天前
Laravel7.x核心特性全解析
数据库·mysql·adb