ADB+Monkey

文章目录

ADB

用途

  • adb(Android Debug Bridge)是Android的主要调试工具,是连接android手机与pc的桥梁,主要用于Android。
  • 借助adb工具,可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等待。
  • 注意:adb.exe位于sdk开发platform-tools目录下

介绍

它是一个客户端/服务器架构的命令行工具,其中客户端是用来操作的电脑, 服务器端是android设备。由三部分组成

  • adb客户端:运行于PC的客户端,通过命令行的方式启动
  • adb服务器:用于开发的机器上作为后台进程运行的服务器,该服务器负责管理客户端与运行于模拟器或设备上的守护进程之间的通信
  • adb daemon(守护进程):一个以后台进程的形式运行于模拟器或手机设备上的守护进程

工作原理

  • 当用户启动一个adb客户端,客户端先检查是否已有一个adb服务进程在运行。如果没有,则启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 所有 adb 客户端均通过端口 5037 与 adb 服务器通信。
  • 然后,服务器将所有运行中的模拟器或设备实例建立连接。它通过扫描所有5555到5585范围内的奇数端口来定位所有的模拟器或设备。服务器一旦发现 adb 守护进程 (adbd),便会与相应的端口建立连接。
  • 服务器与所有设备均建立连接后,用户可以使用 adb 命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此用户可以从任意客户端(或从某个脚本)控制任意设备。

常见adb命令

  • 查看adb的版本序列号:adb version
  • 显示当前运行的Android设备:adb devices
  • 查看adb所支持的所有命令:adb -help
  • 启动adb服务进程:adb start-server
  • 终止adb服务进程:adb kill-server
  • adb devices可能包含三种状态
    • device:表示设备或模拟器已经连接到服务器上
    • offline:表示设备没有连接到服务器上或者没有响应
    • no device:表示没有设备连接
  • 获得模拟器的列表emulator -list -avds
  • 启动模拟器
    emulator -avd Nexus_6_API_25 -port 5555
安装应用

adb install --r *.apk

  • 只连接一个设备
    • adb  install  安装包路径
  • 连接多个设备,需要指定一个设备
    • adb --s 设备序列号 install 安装包路径
  • 覆盖安装,保留数据
    • adb --s 设备序列号 install -r 安装包路径
      例:adb -s 192.168.56.101:5555 install - r E:/test.apk
卸载应用
  • 方法1:
    • adb --s 设备名称 uninstall  应用的包名
    • -k 移除软件包后保留数据和缓存目录
  • 方法2:
    • adb --s 设备名称 shell pm uninstall -k 应用的包名
    • adb -s 192.168.56.101:5555 uninstall com.example.think.today
  • 或者使用两条命令完成:
    • adb  shell
    • pm uninstall -k 应用的包名
    • adb -s 192.168.56.101:5555 uninstall com.example.think.today
将文件复制到设备/从设备复制文件
  • adb push PC源文件  设备的路径
  • adb pull 设备文件  PC的路径
    例:
    adb push d:/demo/a.bat /data/
    adb -s 192.168.56.101:5555 pull /data/a.bat d:/demo
设置端口转发

forward 命令设置任意端口转发,将特定主机端口上的请求转发到设备上的其他端口。

例:设置了主机端口 6100 到设备端口 7100 的转发

adb forward tcp:6100 tcp:7100

例:查看设置的设置端口转发

adb forward --list

adb logcat
  • adb logcat 将日志数据输出到屏幕上
  • adb logcat > E:/demo/test.log(查找包名)
  • 优先级按照从低到高顺利排列
    • V Verbose
    • D Debug
    • I Info
    • W Warning
    • E Error
    • F Fatal
    • S Silent
      例:下面的过滤语句指显示优先级为waring或更高的日志信息
      adb logcat *:W
      adb logcat *:W |findstr PackageManager
adb shell
  • adb shell本身就是一个Linux的Shell,可以调用Android内置命令
  • adb shell
  • adb shell ls
  • pm:调用软件包管理器
  • adb shell pm list packages 打印所有包信息
  • adb shell pm list packages -f keyword (查看它们的关联文件)
  • adb shell pm list packages -3 keyword (进行过滤以仅显示第三方软件包)
  • adb shell pm list packages -i keyword(查看软件包的安装程序)
  • adb shell pm uninstall com.example.MyApp 卸载
  • adb shell pm clear com.example.MyApp 删除与软件包关联的所有数据(例如获取位置权限)
  • 使用adb启动停止一个app
    • -W 等待启动完成
    • --S强制停止再次启动
    • adb shell am start --W --S package/activity
    • adb shell am force-stop package
    • 查看包名aapt dump badging d:\meituan.apk | findstr launchable-activity
    • 启动程序:adb shell am start --W --S com.sankuai.meituan/.acvity.Welcome
  • 获取CPU、内存状态
    • adb shell dumpsys meminfo
    • adb shell dumpsys cpuinfo
  • 获取当前界面元素
    • adb shell dumpsys activity top
  • 获取任务列表
    • adb shell dumpsys activity activities
  • 获取当前 activity
    • adb shell dumpsys activity top
  • 获取特定包基本信息
    • adb shell dumpsys package
      com.example.myapplication0922
    • 截屏
      • adb shell screencap /data/local/test1.png
    • 录屏
      • adb shell screenrecord /data/local/test2.mp4

Monkey

Monkey介绍

  • Monkey是Android系统自带的一个命令行工具,可以运行在Android模拟器里或真实设备中。它可以向被测应用发送伪随机(pseudo-random)的用户事件(如点击、触摸、手势等),对软件进行稳定性与压力测试。

Monkey路径

  • Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/Monkey.jar。
  • Monkey.jar程序是由一个名为"Monkey"的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/Monkey;由adb shell命令启动:
  • adb shell Monkey {+命令参数}来进行Monkey测试。

Monkey启动

  • 命令格式:
    • 1)直接PC启动
      • adb shell monkey [options]
    • 2)Shell端启动
      • adb shell
      • monkey [options]
  • 保存Monkey运行log
    • 保存在PC adb shell monkey [options] > d:\monkey.txt
    • 保存在手机 monkey [options] > /mnt/sdcard/monkey.txt
    • 标准流与错误流分开保存
      monkey [options] 1> /mnt/sdcard/monkey.txt 2>
      /mnt/sdcard/error.txt

Monkey基本参数与事件参数

Monkey基本参数设置
Monkey测试的约束条件
Monkey发送的事件类型和频率


Monkey调试参数

Android常见错误类型
  • ANR:
    • 在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)
    • BroadcastReceiver在10秒内没有执行完毕
  • Crash:
    • 异常停止
    • 异常退出

Monkey黑白名单

  • 黑名单:不测试的应用
  • 白名单:只测试这部分应用
  • 注意不能同时设置黑名单和白名单

Monkey结果解读

Monkey结果分类
  • Monkey运行log输出,按以下顺序输出
  • 各事件截取一个事件



Monkey异常结果

  • ANR输出异常格式:
    • System.err.println("// NOT RESPONDING: " + processName + " (pid " + pid + ")");
  • Crash输出异常格式:
    • System.err.println("// CRASH: " + processName + " (pid " + pid + ")");
    • System.err.println("// Short Msg: " + shortMsg);
    • System.err.println("// Long Msg: " + longMsg);
    • System.err.println("// Build Label: " + Build.FINGERPRINT);
    • System.err.println("// Build Changelist:"+Build.VERSION.INCREMENTAL);
    • System.err.println("// Build Time: " + Build.TIME);
    • System.err.println("// " + stackTrace.replace("\n", "\n// "));

Java常见错误类型

Monkey测试策略介绍

  • 策略例子1:整机测试,而不测试拨号应用,忽略所有错误,次数100万次
    • adb shell monkey --ignore-crashes --ignore-timeouts --pkg-blacklist-file /data/local/tmp/blacklist.txt -v -v 1000000
  • 策略例子2:测试计算器30万次,随机种子为100,随机延迟0-1秒,忽略所有错误
    • adb shell monkey -p com.android.calculator2 -s 100 --throttle 1000 --randomize-throttle --ignore-crashes --ignore-timeouts -v -v 300000
  • 策略例子3:测试计算器,触摸事件30%,其他按键50%,错误停止,延时200
    • adb shell monkey -p com.android.calculator2 --throttle 200 --pct-touch 30 --pct-anyevent 50 -v -v 100000
  • 策略例子4:对计算器进行旋转压力测试,事件延时2秒,10万次
    • adb shell monkey -p com.android.calculator2 --pct-rotation 100 --throttle 2000 100000
  • 策略例子5:仅对整机的应用开启测试,事件延时5秒,10万次
    • adb shell monkey --pct-appswitch 100 --throttle 5000 100000

Monkey的综合应用

命令的组合:

应用选取策略+随机种子策略+事件策略+异常策略+延时策略+事件数量

应用选取策略:

1、单应用

2、多应用组合

3、黑白名单组合

4、整机测试

随机种子策略:

1、固定种子,从小到极大的种子

2、随机种子

事件策略:

1、用户故事策略:依据常见的用户场景划分各事件百分比

2、应用特性策略:依据应用策略对Monkey各事件进行划分百分比

3、专项测试策略:对某个事件提高到很高的百分比,对应用进行专项测试

异常策略:

1、跑完:全部异常忽略

2、专门测试某个异常出现:不忽略某个异常,出现某个异常即停止测试

3、人在时候:上班过程中跑不忽略异常,出现异常马上停止,可以马上分析

4、验收策略:去除全部异常,出现错误则停止,则验收不通过

延时策略:

1、低延时

2、高延时

3、随机延时

4、用户操作延时

事件数量:

1、常规测试:10万

2、压力型测试:30万

3、稳定性测试:50万

4、长时间执行:100万

依据软件处于不同的阶段,软件的成熟度,选用不同的策略

Monkey使用步骤

  • 启动模拟器或者连接真机,adb devices验证
  • 确定被测应用的包名
    • 方式一:问开发
    • 方式二:uiautomatorviewer.bat 查看AppData\Local\Android\sdk\tools
    • 方式三:aapt dump badging d:\group-612_0-meituan.apk | findstr launchable-activity
    • 方式四: adb logcat |findstr "Displayed "
  • 使用Monkey发一条测试命令,分析结果
    • adb shell monkey -p 包名 --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000 > D:\demo\Monkey1.log向系统发送1000000 次随机事件,各个随机事件的时间间隔为500 毫秒,测试过程忽略安全、超时、崩溃等异常。

Monkey结果分析

  • ANR问题:在日志中搜索"ANR"
    • Application Not Responding,在Android上,如果应用有一段时间不够灵敏,系统会向用户显示一个对话框。"强制关闭或等待"。
  • 崩溃问题:在日志中搜索"Exception/Error"

常见问题

  • 连接真机,不稳定
  • 一般是usb本身连接不够稳定,可以提升usb的供电量,不要使用一般的连接线。检查是否是接触不良。
  • Monkey执行过程中有时候会触碰到通知栏等其他地方,如何避免?
  • 官网下载Monkey源代码,进行二次开发。
  • Monkey命令的使用需要组合多种参数方式来实现覆盖

Monkey脚本

  • Monkey脚本简单、快捷、不需要借助任何工具,就可以实现简单自动化
  • 脚本优势:简单、快捷、不需要借助任何工具,只要一个记事本文件
  • 脚本缺点:实现坐标、按键等基本操作的相应步骤,顺序脚本无逻辑性
  • 脚本源码:\development\cmds\monkey\src\com\android\commands\monkey\MonkeySourceScript.java


  • 脚本实例
    • 打开浏览器,输入www.baidu.com, 测试10次
    • 步骤分解:
      • 1.打开浏览器
      • 2.清空网址
      • 3.输入网址
      • 4.确认,载入网址
      • 5.完成退出浏览器
      • adb push d:\demo\browser.ms /data/tmp/
      • 目的:有针对性的进行稳定性测试
  • 参考资料
    monkeyscript - 定制化monkey流程
    https://www.cnblogs.com/YatHo/p/7205162.html
相关推荐
Yang-Never2 天前
ADB->ADB宏控开关控制
adb
LKID体3 天前
mysql的my.cnf配置文件参数说明
数据库·mysql·adb
液态不合群3 天前
Mysql篇-语句执行计划详解(explain)
android·mysql·adb
无名前端小白4 天前
常用Adb 命令
adb
C_eeking4 天前
Ubuntu23.10下解决C语言调用mysql.h问题
c语言·mysql·adb
木古古185 天前
Ubuntu22.04 安装mysql8 无法修改端口及配置的问题 坑啊~~~~
adb
AlbertS5 天前
Windows下使用adb实现在模拟器中ping
android·windows·adb·ping·模拟器
冷白白6 天前
【MySQL】函数
android·数据库·mysql·adb
GOTXX6 天前
【MySQL】ubantu 系统 MySQL的安装与免密码登录的配置
linux·数据库·mysql·adb·ubantu
找藉口是失败者的习惯7 天前
Android adb 指令大全
android·adb