Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用)。
要在通过 USB 连接的设备上使用 adb,您必须在设备的系统设置中启用 USB 调试(位于开发者选项下)。
在搭载 Android 4.2 及更高版本的设备上,“开发者选项” 屏幕默认情况下处于隐藏状态。如需将其显示出来,请依次转到设置 > 关于手机,然后点按版本号七次。返回上一屏幕,在底部可以找到开发者选项。
一些基础的命令示例:
adb devices
adb install [-lrtsdg] <path_to_apk>
adb uninstall [-k] <packagename>
adb pull <remote> <local>
adb push <local> <remote>
adb [-d |-e | -s serial_number] shell <shell_command>
要在设备上启动交互式 shell,请使用 shell 命令,如下所示:
adb [-d | -e | -s serial_number] shell
更多关于 adb 命令的说明:
目前大部分的手机厂商 在 adb 安装 apk 的时候,都会弹出乱七八糟的提示 dialog,需要用户点击才能安装好 app,在进行 apk 安装以及后面的 UI 自动化测试的时候,不同的厂商设备需要进行一些设定后,才能少躺很多坑。
下面罗列一下各个厂商的设备的一些设定的建议:
通用设置:打开开发者模式,在开发者选项中 进行下面的设定
小米 (部分选项的开启可能需要 登录 MIUI 账号(需要插入 SIM 卡))
oppo
vivo
华为
三星
Meizu
Monkey 是一个在模拟器或设备上运行的程序,可生成伪随机用户事件(例如点击、轻触或手势)流以及很多系统级事件。您可以使用 Monkey 以随机且可重复的方式对正在开发的应用进行压力测试。
您可以在每个命令前面加上 adb shell,或者直接进入 shell 并输入 Monkey 命令。
基本语法如下:
adb shell monkey [options] <event-count>
如果未指定任何选项,Monkey 将以静默(非详细)模式启动,并将事件发送到目标上安装的任何(及所有)软件包。下面是一个更典型的命令行,它会启动您的应用并向其发送 500 个伪随机事件:
adb shell monkey -p your.package.name -v 500
monkey 命令行中所有参数的说明:monkey 命令选项参考
基于遍历规则的高性能 Android Monkey,适用于真机/模拟器的 APP UI 压力测试
https://github.com/zhangzhao4444/Maxim
对于 android 端 app 的测试,许多的数据展示都是通过接口的请求获取到数据后才能正确给用户展示相应的内容。
对于接口返回的数据是否正确 ,就需要使用抓包工具来进行抓包测试。
常用的抓包工具有Charles、Flidder、mitmproxy,下面就针对于 Charles 进行讲解。
Charles 是一款代理服务器,可以截取请求和请求结果达到分析抓包的目的。针对移动端的 app 抓包 ,需要对 charles 进行一些配置。
3. 在 Help-> SSL Proxying -> Install Charles Root Certificate 点击后,跳转到 Mac 系统钥匙串访问,找到名称含有 charles 的选项双击->点击信任->选择始终信任
4. 移动端配置证书,先将手机端的 wifi 连接设置好代理。代理的 IP 及端口,可以在 charles 的 Help-> SSL Proxying -> Install Charles Root Certificate on a Mobile Devices or Remote Browser 查看。
在手机浏览器打开"chls.pro/ssl",直接安装即可。
ios 的设备在安装好之后,需要到设置>通用>描述文件,将下载好的证书手动安装后才可以。
注意事项:
- Android 6.0 默认用户级别证书,7.0 级以上的需要修改 Apk 包属性才能抓取 https 的包。参见:Charles SSL Certificates
- iOS10.3 级以后的手机,需要在 设置>通用 > 关于 > 证书信任设置, 找到名称包含 Charles Proxy 的选项 , 将其打开并始终信任。
使用 Charles 进行弱网测试
软件通常会受网络的影响,比如网络差的时候回出现卡顿甚至异常 error 的情况。charles 自带弱网工具,可以模拟弱网环境。在 Proxy->Throttle Settings 下,使用前需要先勾选上 Enable Throttling。如果想要指定域名下的接口请求进行弱网模拟,可以勾选 Only for selected hosts,然后再对话框的下半部分设定 hosts 项。
- Throttle Preset:选择网络类型 例如 56 kbps modem
- Bandwidth:带宽
- Utilistation:利用百分比
- Round-trip 往返延迟
- MTU:字节
使用 Charles 进行 mock 数据
对于返回的数据,又是测试需要模拟各种接口返回的情况,但是返回数据相关的配置还是挺麻烦的,所以 Charles 提供了数据 mock 的方法。下面就介绍 2 种修改返回结果内容的方法。
方法一: 使用断点的方式修改
2. 在手机第二次操作,请求该接口的时候,就会自动进入到断点接口界面。提供一个 Edit Requese 页,可提供修改参数以及请求类型、请求链接的校验。
在请求前,可以修改 request 的内容:
接着点击 Execute 进行接口访问,返回的 response 选择 JSON Text 可以看到断点链接返回的参数,这个时候就可以改动返回值的结果,以达到想要测试的目的。
再次点击 Execute 之后,这个修改过的 response 结果就被 app 接收到了。用这种点断修改的方式可以手动修改单次请求的返回结果,达到测试的目的。
注意:
想要开启/关闭断点功能,可以在 Proxy->Enable Breakpoints &Disable Breakpoints 中进行开启关闭
对于之前设定了断点的接口,需要进行修改删除的,可以在 Proxy-> Breakpoints Settings 中进行修改
方法二:使用 Rewrite 功能,直接将接口返回结果重写
Charles 的 Rewrite 功能非常强大,可以重写接口所有元素的内容,例如:header、host、url、path、query、param、response status、body。
1. 首先选择 Tools->Rewrite,会弹出下面弹窗,选中 Enable Rewrite 以及点击左下角的 Add:
2. 具体需要重写的对象,可以在 Location 下点击 Add 去添加。具体重写操作可点击右下侧 add 按钮进行添加。 当所有都添加完毕,点击 OK 保存即可。
Rewrite 配置好之后,每次请求对应的接口,都会讲重写修改后的内容返回给终端,和方法一的断点设定不同的是,不需要每次都手动去修改 response 的结果。charles 会自动修改内容并返回修改后的结果。
postman是一个强大的接口测试平台,具有友好的可视化界面。测试过程中的手动调试接口,用这个工具就够了
Charle 抓包的接口,可以直接导入到 postman
复制接口的 cURL,抓包成功的接口,直接右键,点击 Copy cURL Request
在 postman 里面,点击 import,在弹出的对话框内,选择 Raw Test,然后将复制的 cURL 张贴进来,点击底部的 Continue 就行了
其他 postman 的设置和操作,看完下面的两个帖子,基本上就都能掌握了:
postman 接口测试--xinxi
Postman 使用小结 -- 小背影
Perfdog为腾讯出品的移动全平台性能测试分析专业工具,支持全平台的应用形态测试,包括 Android、iOS、小游戏、小程序、H5 等。且 Android 设备无需 ROOT,iOS 设备也无需越狱,能非常高效地解决两大系统测试分析的难题,提高测试工作的效率。
Appetizer是一个全面的移动测试以及数据分析平台,数据采集功能在 APP 运行中收集错误、性能、网络信息,用于调试、诊断错误、评估性能;集成的各种测试工具能够高效编写 UI 自动化脚本、执行 UI 压力测试、自动化 Monkey/遍历界面与功能、一键测量 APP 冷热首次启动过程等。 Appetizer 是完整的开发生态,开发接入优质第三方工具,从开发到发版形成统一的闭环。
SoloPi 自动化测试工具是一个无线化、非侵入式的 Android 自动化工具,公测版拥有录制回放、性能测试、一机多控三项主要功能,能为测试开发人员节省宝贵时间。
UI Automator是谷歌自家推出的一个界面测试框架,适用于整个系统上以及多个已安装应用间的跨应用功能界面测试。
UI Automator 测试框架提供了一组 API,用于构建在用户应用和系统应用上执行交互的界面测试。通过 UI Automator API,您可以执行在测试设备中打开 “设置” 菜单或应用启动器等操作。UI Automator 测试框架非常适合编写黑盒式自动化测试,此类测试的测试代码不依赖于目标应用的内部实现细节。
UI Automator 测试框架的主要功能包括:
- 用于检查布局层次结构的查看器。如需了解详情,请参阅 UI Automator 查看器。
- 用于检索状态信息并在目标设备上执行操作的 API。如需了解详情,请参阅访问设备状态。
- 支持跨应用界面测试的 API。如需了解详情,请参阅 UI Automator API。
缺点:
Appium 是一个开源工具,用于自动化 iOS 手机、 Android 手机和 Windows 桌面平台上的原生、移动 Web 和混合应用。其跨平台,多语言的特性,使得其成为目前最为主流的自动化测试框架
原理图:
atx-uiautomator2是一个自动化测试开源工具,仅支持 Android 平台的原生应用测试,使用 python 编写脚本。
atx-uiautomator2 封装了谷歌自带的 uiautomator2 测试框架,提供便利的 python 接口。他允许测试人员直接在 PC 上编写 Python 的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率。
原理图:
Airtest是由网易游戏推出的一款自动化测试框架,基于图像识别的 UI 自动化测试框架,适用于游戏和 App,支持平台有 Windows、Android 和 iOS
- 自动化脚本录制、一键回放、报告查看,轻而易举实现自动化测试流程
- 支持基于图像识别的 Airtest 框架,适用于所有 Android 和 Windows 游戏
- 支持基于 UI 控件搜索的 Poco 框架,适用于 Unity3d,Cocos2d 与 Android App
macaca是面向多端的自动化测试框架,其整体的框架类似 Appium
原理图:
2. atx-server2
原理图:
1. 华为远程真机
需要注册开发者账号,貌似每天限制 8 小时使用,支持 apk 上传安装,日志获取,设备详情展示
2. 三星真机调试
需要注册开发者账号,支持 apk 上传,日志获取,远程 adb connect
3. Vivo 远程真机
需要注册开发者账号,每天限时 3 小时;支持本地上传 apk ,日志获取 。除了 vivo 的设备外 还有一两台华为和 pixel 的设备
4. 360 开测 真机租用
需要注册账号,开币没了 可以加 qq 群申请。各种品牌的设备都比较全。
5. UC 能效 岩鼠 云真机租用
需要注册账号,免费只有 30 分钟 ,使用两次,之后就要氪金了
6. Wetest 云真机
需要注册账号,大多数设备使用需要氪金。
7. Testin 远程真机
需要注册,,需要氪金。
详解 Android 耗电量 API
搬运:Battery Historian 2.0
深入浅出 Android App 耗电量统计
安卓耗电测试
通过电池电量评测安卓 App 的耗电水平
Android 性能测试实践合集
AndroidApp 优化之性能测试分析工具阅读 2059
Android App 持续集成性能测试:启动流量(1)
Android App 持续集成性能测试:启动流量(2)
Android ANR 监测方案解析
初识 APP 安全性测试
使用 apktool 工具对 Android APK 进行反编译与回编译
Android 安全专项-Apk 的加固
Android app 安全测试调研及执行
《Android 安全测试初探》合集
移动安全相关贴
APP 兼容性该怎么测 (1) 概述
Android API 兼容性指南
https://github.com/Genymobile/scrcpy
android 设备投屏到电脑的一个软件,贼好用。
https://mediaarea.net/en/MediaInfo
MediaInfo 是一款自由开源的应用程序,它可以显示媒体文件相关的技术信息,以及许多音频和视频文件的标签信息。
https://www.cockos.com/licecap/
一个 gif 录屏的小工具
https://github.com/Clipy/Clipy/releases
一次性复制多个内容,然后选择性的粘贴
https://zipzapmac.com/Go2Shell
可以在 Finder 中,通过点击一个图标,快速在当前目录打开 Terminal。
https://github.com/Mortennn/Dozer/releases
一个完全免费的 macOS 菜单栏工具,一拖一点就能轻松隐藏图标