软件测试 | adb 命令的组成
adb 命令
adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。
adb 是一种功能强大的命令行工具,可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作,例如安装和调试应用,并提供对 Unix shell 的访问权限。
adb 组成
adb 采用了客户端-服务器(c/s)模型,包括 3 部分
adb 的 Client:当 adb 运行在计算机上时,我们可以在命令行中通过 adb 命令来调用 adb 的客户端(Client)。Client 本质上就是 Shell,它可以发送命令给 Server。Client 发送命令时,首先会检测 PC 上有没有启动 Server,如果没有启动 Server,则会自动启动一个 Server,然后将命令发送到 Server。
adb 的 Server:运行在计算机后台的进程,用于管理客户端与运行在模拟器或真机上的守护进行通信。
adb 的 daemon:守护进程作为一个后台进程在 Android 设备或模拟器系统中运行,它的作用是连接 adb 服务端,并且为运行在主机上的 adb 客户端提供一些服务。
adb 工作原理
当 adb 客户端启动时,客户端会先检查 adb 服务端是否启动。如果没有,会先启动服务端进程。adb 服务端启动后,会与计算机上的 5037 端口绑定,并监听 adb 客户端发出的命令。
然后服务端会与正在运行的 Android 设备建立连接。服务端通过扫描计算机上的 5555 到 5585 之间的奇数号端口查找 Android 设备。服务端一旦发现 Android 设备都使用一对端口,偶数端口用于控制台连接,奇数端口用于与 adb 连接。
服务端与所有 Android 设备建立连接后,就可以使用 adb 命令来访问 Android 设备了。服务端会管理已经建立的连接,并处理来自 adb 客户端的命令,如图
启用 adb 调试
Android 系统的移动设备(如手机)可以通过 USB 连接到 adb,连接时需要在移动设备的系统设置中启动 USB 调试(位于手机的开发者选项下),启动 USB 调试后,设备上的 adb 守护进程就会被启动,adb 服务端才可以和 Android 设备建立连接。
如果希望计算机连接 Android 模拟器或者真机,需要先打开 USB 调试开关。
(1)模拟器,不需要手动设置 USB 调试开关,默认就是打开 USB 调试开关。
(2)真机设备,需要手动打开 USB 调试开关。
1)首先需要在计算机上安装 Android 手机驱动。
2)然后打开移动设备的设置应用,进入关于界面,然后开启 USB 调试模式。
adb 常用命令
1.adb 命令格式
-d:指定当前唯一通过 USB 连接的 Android 设备为命令目标。
-e:指定当前唯一运行的模拟器为命令目标。
-s:指定相应 serialNumber 号的设备/模拟器为命令目标。
命令格式中方括号的内容是可选的,尖括号中的内容是必填的。方括号中参数可以指定设备,关于设备的指定有 3 个参数可以使用:-d、-e 和-s。其中使用最多的是-s。程序员在连接多台设备的时候,一般都是使用-s 加上设备的序列号这种方式去指定具体设备。
一台计算机上可以同时连接多台设备,当计算机上连接多台设备时,我们如果想通过 adb 操作某台设备,必须在命令中指定设备的序列号,这样命令才可以在某个特定的设备上被执行。
2.查询设备
把 Android 设备连接到 adb 服务端后,需要确认设备的连接状态。这时可以使用查询命令进行查询。
3.连接模拟器(以 MuMu 模拟器为例)
adb connect 命令可以通过 WLAN 的方式连接到模拟器,7555 为 MuMu 模拟器使用的计算机上的端口。
adb devices 可以查询设备连接的状态。
Windows 系统中,连接模拟器需要先执行 connect 命令去连接模拟器,127.0.0.1 是本地的 IP 地址,因为模拟器是安装在本地计算机上的,所以要使用本地的 IP 地址,加上模拟器使用的一个端口来连接模拟器。MuMu 的端口是 7555,如果使用的是其他类型的模拟器,需要先了解它用的计算机上端口是什么,然后再去连接。macOS 系统中连接模拟器不需要执行 connect 命令,直接执行 adb kill-server && adb devices 命令即可。
4.连接真机
真机直接用 USB 连接到计算机,不需要执行 connect 命令。
在计算机上直接用 adb devices 命令,可查看已经连接到计算机上的设备列表。
使用命令后,如果设备已经成功连接到计算机上,那么设备列表中就会展示已连接设备的信息。主要信息包括如下。
emualotr-5554:设备序列号。
device:设备连接状态为成功。
5.安装或卸载 App
测试人员在测试 App 过程中,如果需要安装或者卸载 App,可以直接用 adb 命令来操作。
普通安装:adb install <apk 路径>
覆盖安装:abd install -r<apk 路径>
完全卸载:adb uninstall <包名>
保留配置文件的卸载:adb uninstall -k <包名>
设备与计算机传输文件
adb 命令支持计算机和 Android 设备之间的文件互传,例如,要提取 Android 设备中的日志文件到本地计算机,就可以通过 adb 命令的方式来完成。
从计算机上传文件至设备:adb push <计算机路径><设备路径>
从设备上复制文件至计算机:adb pull <设备路径><计算机路径>
日志
打印与计算机连接的设备的日志(log)信息命名格式与描述如下。
屏幕输出日志:adb logcat
通过标签过滤信息:adb logcat -s 标签
显示时间:adb logcat -v time
输出所有信息:adb logcat -v long
输出日志到文件:adb logcat -v time > log.txt
清楚缓存中日志信息:abd logcat -c
使用 adb shell 命令远程登录 Android 系统,可以进入 Android 设备的系统内部。进入 Android 设备系统内部后,测试人员在系统内部即可以执行一些简单的 Lunix 命令,也可以执行很多特有的命令。
使用 adb shell 命令有两种方式。
一种是直接在 adb shell 后面跟上命令
例如:
另一种是在 Android 设备上启动交互 adb shell
例如,进入 Android 设备内部,可以查看设备内部的目录结构和内容,执行的命令如下:
要退出交互式 adb shell,可以按 Ctrl+D 组合键或输入“exit” 实现退出操作。
Android 常用测试命令
1.设备截图/录屏
在测试过程中,测试人员如果需要对测试过程中进行截图或者录屏,也可以使用 adb 命令完成
截图:adb shell screencap<设备路径>
录屏:adb shell screenrecord<设备路径>
2.调用 Activit 管理器
在 adb shell 中,我们可以使用 Activity 管理器(am)工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、修改设备屏幕属性等。
在测试过程中,如果我们需要启动 App 或强制关闭 App,可以通过 adb 命令来实现。
启动应用(App):adb shell am start -n <包名>/<Activity 名>
强制停止应用(App):adb shell am force-stop<包名>
3.调用软件包管理器
在 adb shell 中,我们可以使用软件包管理器(pm)工具发出命令,以对 Android 设备上安装的 App 包执行一些操作。
如果需要查询 Android 设备里都安装了什么应用(App),我们即可以使用 adb shell pm list 命令来查看,也可以再上述命令中加上不同的参数区查看不同类型的应用,还可以通过 adb 命令来清楚应用中相关的数据。具体命令格式如下。
显示 Android 设备中安装的所有应用:adb shell pm list packages.
只显示系统应用:adb shell pm list packages -s.
只显示第三方应用:adb shell pm list packages -3
删除与 App 包关联的所有数据:adb shell pm clear<包名>
4.adb shell dumpsys
dumpsys 是一种在 Android 设备上运行的工具,它可提供有关系统服务的信息。我们可以在 adb 中使用命令行调用 dumpsys,用以获取链接的设备上运行的所有系统服务的信息。
在测试中,如果我们需要通过 adb 命令启动 App,则需要知道 App 的包名和人口的 Activity 名。这个时候,我们就可以通过下面这个条命令获取到这两个信息。
注:这个场景下,需要我们启动应用程序,让应用程序在前台运行,然后再执行下面的命令。
上面的信息中展示了当前的 App 包名和 Activity 名称。
包名:com.xueqiu.android。
Activity 名:common.MainActivity。
5.adb uiautomator
adb 命令还支持直接获取 App 的页面信息。页面信息包含了页面中元素的属性,我们做自动化测试时,可以通过这些元素的属性去定位元素。获取到的页面元素布局会输出到一个 xml 文件中。
获取当前窗口的 UI 布局简化信息:adb shell uiautomator dump --compressed。
不指定输出文件路径时,dump 输出的文件默认存储路径为/sdcard/window_dump.xml。
我们可以通过 adb pull 命令把文件传输到计算机中,然后用 UI Automator Viewer 工具打开文件并查看页面布局。
指定输出文件路径:adb shell uiautomator dump file<设备路径>。
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论