【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 测试阶段也暂时告一段落。感谢大家一路以来的陪伴与支持,本期内容到此结束,最后,如果觉得笔记对你有用,记得给小特点赞+关注哦~

我们下期再会~🎉👋

相关推荐
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.6 小时前
MySQL半同步复制与GTID实战详解
android·mysql·adb
大白菜和MySQL9 小时前
linux系统环境常用命令
android·linux·adb
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.1 天前
基于MySQL一主一从环境添加多个新从库
android·mysql·adb
弹简特1 天前
【APP测试】ADB 环境 + 夜神模拟器超详细搭建教程(含工具包下载)
adb·工具下载
我科绝伦(Huanhuan Zhou)1 天前
分享一个MySQL自动化部署平台
mysql·adb·自动化
大黄说说2 天前
MySQL索引失效的常见场景有哪些?如何通过EXPLAIN分析查询性能?
android·adb
做个文艺程序员2 天前
深入 MySQL 内核:MVCC、Buffer Pool 与高并发场景下的极限调优
数据库·mysql·adb
camellias_2 天前
ubuntu(二)ubuntu18.04安装mysql8
linux·ubuntu·adb
wb1892 天前
企业级MySQL重习
数据库·笔记·mysql·adb·云计算