测试基础 Android 端测试基础知识分享,附带 mac 软件分享

linpengcheng · 2020年06月09日 · 最后由 linpengcheng 回复于 2020年12月30日 · 9128 次阅读

Android 常用测试工具

基础工具

adb

Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用)。
要在通过 USB 连接的设备上使用 adb,您必须在设备的系统设置中启用 USB 调试(位于开发者选项下)。
在搭载 Android 4.2 及更高版本的设备上,“开发者选项” 屏幕默认情况下处于隐藏状态。如需将其显示出来,请依次转到设置 > 关于手机,然后点按版本号七次。返回上一屏幕,在底部可以找到开发者选项。
一些基础的命令示例:

  • 查询已连接的设备
adb devices
  • 安装 &卸载 APK
adb install [-lrtsdg] <path_to_apk>
adb uninstall [-k] <packagename>
  • 将文件复制到设备/从设备复制文件
adb pull <remote> <local>
adb push <local> <remote>
  • 发出 shell 命令
adb [-d |-e | -s serial_number] shell <shell_command>

要在设备上启动交互式 shell,请使用 shell 命令,如下所示:

adb [-d | -e | -s serial_number] shell

更多关于 adb 命令的说明:

awesome-adb
adb 查看设备信息


部分手机厂商的一些设置项注意点

目前大部分的手机厂商 在 adb 安装 apk 的时候,都会弹出乱七八糟的提示 dialog,需要用户点击才能安装好 app,在进行 apk 安装以及后面的 UI 自动化测试的时候,不同的厂商设备需要进行一些设定后,才能少躺很多坑。

下面罗列一下各个厂商的设备的一些设定的建议:

  • 通用设置:打开开发者模式,在开发者选项中 进行下面的设定

    • 勾选上 USB 调试 (连接 USB 后启用调试模式),勾选一律允许使用这台计算机进行调试,避免以后的重复操作
    • 取消勾选 监控 ADB 安装应用 (使用 ABD 安装应用时,需要用户确认)
    • 取消勾选 连接 USB 时候,总是是弹出提示
    • 勾选 "仅充电"模式下允许 ADB 调试
    • 取消勾选 通过 USB 验证应用
    • 建议将 显示触摸操作 选项勾选上
    • 建议将 不锁定屏幕 选项勾选上 (部分手机在显示设定中将锁屏时间设为永不)
  • 小米 (部分选项的开启可能需要 登录 MIUI 账号(需要插入 SIM 卡))

    • USB 安装 (允许通过 USB 安装应用)
    • USB 调试 (安全设置) (允许通过 USB 调试修改权限或模拟点击)
    • 启用 MIUI 优化 建议关掉,关掉后去权限设置里面配置下,安装应用就不会弹窗了
    • 在系统设置的语言和输入法中,取消安全键盘的选中状态:
  • oppo

    • 开发者选项的最底部,勾选 禁止监控权限
    • OPPO 部分机型在每次安装 APK 时都需要输入密码:暂无更靠谱的解决方案,有一个帖子可以供参考 [收集帖] 各厂手机不能自动化的坑和解决方案 。
  • vivo

    • 输入法设置中,取消安全输入
    • 部分机型需要 在开发者选项中打开安全权限
  • 华为

    • 输入法设置中,取消安全输入
    • 部分华为型号的手机,可能出现点击位置与实际位置不符的情况(mate20pro, mate7 等),需要在 设置 - 显示 - 屏幕分辨率 中,将分辨率设置为最高即可。
  • 三星

    • 显示 - 屏幕分辨率调到最大 (WQHD)
    • 在开发者选项中,打开未知来源、取消权限监控。
  • Meizu

    • 开发中选项中 性能优化 - 高级日志输出(推荐全部允许)
    • 关闭 手机管家 - Flyme 支付保护

monkey

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 命令选项参考

Maxim 二次开发的 monkey

基于遍历规则的高性能 Android Monkey,适用于真机/模拟器的 APP UI 压力测试
https://github.com/zhangzhao4444/Maxim


网络测试工具

常用代理工具 Charles 、Flidder

对于 android 端 app 的测试,许多的数据展示都是通过接口的请求获取到数据后才能正确给用户展示相应的内容。
对于接口返回的数据是否正确 ,就需要使用抓包工具来进行抓包测试。
常用的抓包工具有CharlesFliddermitmproxy,下面就针对于 Charles 进行讲解。
Charles 是一款代理服务器,可以截取请求和请求结果达到分析抓包的目的。针对移动端的 app 抓包 ,需要对 charles 进行一些配置。

  • HTTP、HTTPS 抓包分析配置
    1. 配置代理,charles 抓取移动端的数据,需要将计算机和移动设备保持在同一个网段 (同一个 WiFi 下)。打开Proxy -> Proxy Setting,填入代理的端口号 (默认 8888),勾选上Enable transparent HTTP proxying(如果想要抓取 HTTPS 的数据,还需要进行下面的配置。
    2. 在 Proxy-> SSL Proxying Setting -> SSL proxying,在 Include 中点击 Add,并在 host 处填写 ,同时点击Enable SSL Proxying*,然后点击 OK。

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 种修改返回结果内容的方法。
    方法一: 使用断点的方式修改

    1. 首选选择想要 mock 数据的接口,设置断点,右键点击 Breakpoints

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

postman是一个强大的接口测试平台,具有友好的可视化界面。测试过程中的手动调试接口,用这个工具就够了
Charle 抓包的接口,可以直接导入到 postman
复制接口的 cURL,抓包成功的接口,直接右键,点击 Copy cURL Request

在 postman 里面,点击 import,在弹出的对话框内,选择 Raw Test,然后将复制的 cURL 张贴进来,点击底部的 Continue 就行了

其他 postman 的设置和操作,看完下面的两个帖子,基本上就都能掌握了:
postman 接口测试--xinxi
Postman 使用小结 -- 小背影


专项工具

Perfdog

Perfdog为腾讯出品的移动全平台性能测试分析专业工具,支持全平台的应用形态测试,包括 Android、iOS、小游戏、小程序、H5 等。且 Android 设备无需 ROOT,iOS 设备也无需越狱,能非常高效地解决两大系统测试分析的难题,提高测试工作的效率。

Appetizer

Appetizer是一个全面的移动测试以及数据分析平台,数据采集功能在 APP 运行中收集错误、性能、网络信息,用于调试、诊断错误、评估性能;集成的各种测试工具能够高效编写 UI 自动化脚本、执行 UI 压力测试、自动化 Monkey/遍历界面与功能、一键测量 APP 冷热首次启动过程等。 Appetizer 是完整的开发生态,开发接入优质第三方工具,从开发到发版形成统一的闭环。

solopi

SoloPi 自动化测试工具是一个无线化、非侵入式的 Android 自动化工具,公测版拥有录制回放、性能测试、一机多控三项主要功能,能为测试开发人员节省宝贵时间。

自动化测试

uiautomator

UI Automator是谷歌自家推出的一个界面测试框架,适用于整个系统上以及多个已安装应用间的跨应用功能界面测试。
UI Automator 测试框架提供了一组 API,用于构建在用户应用和系统应用上执行交互的界面测试。通过 UI Automator API,您可以执行在测试设备中打开 “设置” 菜单或应用启动器等操作。UI Automator 测试框架非常适合编写黑盒式自动化测试,此类测试的测试代码不依赖于目标应用的内部实现细节。
UI Automator 测试框架的主要功能包括:
- 用于检查布局层次结构的查看器。如需了解详情,请参阅 UI Automator 查看器
- 用于检索状态信息并在目标设备上执行操作的 API。如需了解详情,请参阅访问设备状态
- 支持跨应用界面测试的 API。如需了解详情,请参阅 UI Automator API
缺点:

  1. 测试脚本只能使用 Java 语言
  2. 测试脚本要打包成 jar 或者 apk 包上传到设备上才能运行。

Appium

Appium 是一个开源工具,用于自动化 iOS 手机、 Android 手机和 Windows 桌面平台上的原生、移动 Web 和混合应用。其跨平台,多语言的特性,使得其成为目前最为主流的自动化测试框架
原理图:

openatx-uiautomator2

atx-uiautomator2是一个自动化测试开源工具,仅支持 Android 平台的原生应用测试,使用 python 编写脚本。
atx-uiautomator2 封装了谷歌自带的 uiautomator2 测试框架,提供便利的 python 接口。他允许测试人员直接在 PC 上编写 Python 的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率。
原理图:

AirTest

Airtest是由网易游戏推出的一款自动化测试框架,基于图像识别的 UI 自动化测试框架,适用于游戏和 App,支持平台有 Windows、Android 和 iOS
- 自动化脚本录制、一键回放、报告查看,轻而易举实现自动化测试流程
- 支持基于图像识别的 Airtest 框架,适用于所有 Android 和 Windows 游戏
- 支持基于 UI 控件搜索的 Poco 框架,适用于 Unity3d,Cocos2d 与 Android App

macaca

macaca是面向多端的自动化测试框架,其整体的框架类似 Appium
原理图:

设备平台

自建 STF 、atx-server2

1. STF(Smartphone Test Farm)

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 专项测试

耗电

详解 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 兼容性指南


一些软件分享

scrcpy

https://github.com/Genymobile/scrcpy
android 设备投屏到电脑的一个软件,贼好用。

MediaInfo(收费)

https://mediaarea.net/en/MediaInfo
MediaInfo 是一款自由开源的应用程序,它可以显示媒体文件相关的技术信息,以及许多音频和视频文件的标签信息。

licecap

https://www.cockos.com/licecap/
一个 gif 录屏的小工具

Clipy

https://github.com/Clipy/Clipy/releases
一次性复制多个内容,然后选择性的粘贴

Go2Shell

https://zipzapmac.com/Go2Shell
可以在 Finder 中,通过点击一个图标,快速在当前目录打开 Terminal。

Dozer

https://github.com/Mortennn/Dozer/releases
一个完全免费的 macOS 菜单栏工具,一拖一点就能轻松隐藏图标

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 8 条回复 时间 点赞

分享一个踩过的坑, 有些有 WLAN 安全检测的设备,最好关闭了。不然 u2 中大概率会报 http connection is down

这种集合帖应该很受欢迎吧!毕竟一下就可以收藏很多东西了。
为分享精神点赞!👍

#975 回复

这东西在哪里设置?也是开发者选项里的?

linpengcheng 回复

无线和网络-WLAN-右上角点一下-WLAN 设置 - WLAN 安全检测。(华为 P10)

#975 回复

还有这玩意儿😂

linpengcheng 想问一下关于移动端 APP 抓包的问题 中提及了此贴 06月10日 22:01
linpengcheng 回复

我发现了!!!是我们公司网络的锅,我们公司 wifi 是无密码用工号登陆的,只有在无密码的 wifi 下才会出现这种情况

接口测试工具可以试用一下国产的接口测试和接口文档生产工具 apipost:https://www.apipost.cn/?dt=2020

我们用的是 yapi

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册