Android Test Station 是一种测试工具,Android 开发人员和测试工程师可以使用它来使用用户界面来运行标准 Android 测试套件,例如Android 兼容性测试套件 (CTS) 。该工具充当Trade Federation (TF)的 Web 界面,使您能够以最少的设置轻松地在一组测试设备上运行 CTS,并建立一个持续运行测试的时间表。
设置 Android 测试站
本节介绍如何安装和设置 Android 测试站。
Android Test Station 使用来自以下位置的源代码:
- Android 测试站源代码
- TradeFed 集群源代码
安装 Android 测试站
遵循您希望运行的测试套件的任何硬件和软件要求。
CTS 的要求可在source.android.com上找到。
没有额外的硬件要求,但我们建议使用具有 100 GB 可用硬盘空间和 8 GB 内存的机器,这足以存储多次运行测试套件的输出文件。
有两种安装 Android Test Station 的方法:
使用安装程序安装
在 Ubuntu 18.04+ 上,安装程序会安装和配置运行 Android Test Station 所需的所有程序和资源。
要使用安装程序:
运行安装程序:
curl https://storage.googleapis.com/android-mtt.appspot.com/prod/install.sh | bash
运行
mtt version
以检查已安装的 Android Test Station CLI 版本。
手动安装
安装 Docker
您可能需要重新启动终端窗口或注销并重新登录才能使权限更改生效。
安装 Python 3.7
Android 测试站 CLI 需要 Python 3.7。
对于 Ubuntu 16.04 或更早版本,您需要首先通过执行以下操作之一添加 Python 3.7 的存储库:
运行此命令:
sudo add-apt-repository ppa:deadsnakes/ppa
或者从源代码构建和安装存储库
要安装 Python 3.7,请运行以下命令:
sudo apt-get update
sudo apt install python3.7 python3.7-distutils
获取 Android 测试站 CLI
启动 Android 测试站
使用以下命令启动 Android 测试站:
mtt start
首次启动 UI 时,可能需要几分钟才会出现。 CLI 显示一个 Web URL 以在浏览器中访问 UI。默认情况下,Web URL 是localhost:8000
。如果需要,您可以在启动时使用--port
标志更改默认端口。
如果有更新的版本可用,您可以更新到当前版本。您可以查看最新版本的发行说明。
要更新到当前版本,请运行:
mtt start --force_update
要停止应用程序,请运行:
mtt stop
要查看其他命令的列表,请使用:
mtt --help
备份和恢复数据库
要备份 ATS 数据库,请停止应用程序并运行以下命令,将当前数据库备份到主目录中名为mtt-backup.tar
的 TAR 文件中:
docker run --rm --mount source=mtt-data,target=/data -v ~:/out ubuntu bash -c "cd /data && tar cvf /out/mtt-backup.tar ."
要恢复,请在启动应用程序之前运行以下命令:
docker run --rm --mount source=mtt-data,target=/data -v ~:/out ubuntu bash -c "cd /data && tar xvf /out/mtt-backup.tar"
安装向导
首次安装并运行 Android Test Station 后,设置向导将引导您完成几个步骤,帮助您针对您的环境自定义工具。您在此处所做的任何更改都可以稍后通过“设置”页面重新配置。
恢复配置备份
如果您有从其他 Android 测试站主机备份的配置文件,您可以通过单击上传文件按钮上传文件以复制从该主机修改的任何配置。
图 1.恢复配置备份
设置默认服务帐号
您可以设置 Android Test Station 在访问您的资源(例如,Google Cloud Storage、Google Drive)时默认使用的服务帐户。要验证您的服务帐户,请单击上传服务帐户密钥并选择您的服务帐户的 JSON 密钥文件。
图 2.设置服务帐户
服务账号认证成功后,页面右上角会出现账号邮箱。要更改服务帐户,请单击帐户名称,删除当前默认帐户,然后上传新的服务帐户密钥。
图 3.更改服务帐户
导入配置集
配置集是用于运行测试套件的一组配置,包括相关的设备操作、构建通道等。配置集托管在特定的 Google Cloud Storage (GCS) 存储桶中。使用您的 Google 帐户验证 GCS 构建通道后,您将看到所有可用配置集的列表。
选择您想要添加到测试站主机的任何配置集,然后单击Import Selected 。
图 4.导入配置集
包括 Wi-Fi 设置
某些 CTS 测试要求您的设备连接到 Wi-Fi 热点。要选择您的 Wi-Fi 网络,请输入WiFi SSID和可选的WiFi PSK 。
图 5. Wi-Fi 热点设置
完成设置向导后,页面将重新加载应用的新设置。
连接设备
必须启用 USB 调试才能使用设备进行测试。要启用调试:
按照启用开发人员选项和调试中的说明进行操作。
如果您计划使用预加载了自定义 ADB 密钥的测试 Android 构建,请将自定义
.adb_key
文件放在~/.android/
目录下。在为运行这些构建的设备刷新设备后,这些文件会自动加载并传递给 ADB 以自动启用 USB 调试。
使用 USB 将设备连接到主机。
该设备将在刷新 Web 界面后一分钟内出现在 Android 测试站设备选项卡中。您还可以在此选项卡上查看设备的状态。
图 6.连接设备
不同的设备状态是:
- 可用- 设备已连接并准备好运行测试。
- 已分配- 设备已连接并且当前正在运行测试。每台设备一次只能运行一个测试,因此设备必须在运行新的测试之前完成当前的测试。
运行测试
选择测试
Android Test Station 附带一组预捆绑的 CTS 配置。要运行这些测试之一,请转到“测试套件”选项卡并单击“运行测试”以获取所需的测试。
图 7.选择测试
要编辑或添加新测试,请参阅添加测试。
配置测试运行
编辑用于此特定测试运行的参数。大多数参数都预先填充了所选测试配置中定义的值。
此步骤可以使用默认值完成,但您可以更改任何参数,例如Max Retry和Command ,以满足您的需要。
图 8.配置测试运行
测试运行参数为:
- Name - 您希望运行的测试套件的名称。
- 运行计数- 此测试运行应按计划执行的次数。测试运行是使用Trade Federation安排的,如果有能力,它可以并行运行多达 20 个测试运行。
- Max Retry - 如果至少一项测试失败,则重试测试运行的最大次数。对于完整的 CTS 运行,这通常设置为 4-6 次重试,以处理不稳定的测试。
- Queue Timeout - 如果测试运行在Queued状态下停留的时间过长,它会自动取消。在此处指定取消前等待的时间。默认值为 24 小时。
命令- 运行测试套件的命令。您可以在此处输入其他命令行参数。例如,在 CTS 8.1 中运行特定模块:
cts-suite -m ShortModuleName
重试命令- 重试测试套件的命令。您可以在此处添加其他命令行参数。例如,要仅重试 CTS 8.1 中的特定模块,请使用:
cts --retry 0 -m ShortModuleName
重试参数可能与初始命令中可用的参数不同,因此请在官方网站上查看所选测试套件支持的参数。
以前的测试运行- 如果您希望重新运行以前的测试运行:
本地 - 如果在当前主机上开始运行,请输入查看测试运行详细信息时看到的测试运行 ID。
图 9.本地先前的测试运行
远程 - 如果在不同的主机上开始运行,请通过选择Remote 、单击Upload Test Results File并从本地存储中选择一个文件来上传测试结果文件。
图 10.远程之前的测试运行
选择设备
单击复选框以选择要分配用于运行测试套件的设备。分片计数应自动更改以匹配所选设备的数量。
图 11.选择设备
要通过设备序列号以外的属性选择设备,您可以手动输入“设备规格”。例如,要选择 3 个产品名称为“bramble”的设备,请输入以下内容:
product:bramble;product:bramble;product:bramble
支持的属性是:
- build_id
- device_serial
- 设备类型
- 主机名
- 产品
- product_variant
- sim_state
所有选中的设备都必须处于Available状态才能执行测试运行,并且在执行测试运行时它们都切换到Allocated状态。测试运行在等待设备可用时处于Queued状态。
添加设备操作
设备操作是可以在每次测试运行之前执行的脚本。某些设备操作已配置,例如闪烁和重新启动。要创建新设备操作,请参阅创建新设备操作。
图 12.设备操作
要将设备操作添加到测试运行,请单击Add new action ,选中要添加的操作的复选框,然后单击Add Action(s) 。设备操作按顺序执行。您可以通过拖动来重新排序操作。
图 13.重新排序操作
设置测试资源
测试资源是执行测试运行所需的文件。例如,运行 CTS 需要一个android-cts*.zip
文件,而刷机则需要您提供构建映像。
测试套件 zip 文件的下载 URL 应默认为提供给合作伙伴的 Google Drive 链接。您可以通过单击浏览来选择不同的文件。在弹出窗口中,您可以输入文件下载链接,使用来自经过身份验证的构建通道的文件,或从本地存储上传文件以使用。
图 14.测试资源
下面是通过 Web URL 选择测试资源的弹出窗口。您只需输入下载 url 链接,然后单击选择按钮确认选择。
图 15.测试资源选择器 - Web URL
如果您已将资源上传到 Google Grive、Google Cloud Storage (GCS) 或其他频道,您还可以导航到特定频道的选项卡并在那里选择资源。这是从谷歌驱动器中选择资源的示例。
图 16.测试资源选择器 - Google Drive
除了仅选择文件外,文件名字段还支持通配符。文档可以在这里找到。
图 17.测试资源选择器 - 通配符模式支持
您还可以从 Android Test Station 的本地文件存储中选择一个文件。您可以将文件上传到此存储中,也可以直接使用本地文件和目录。
图 18.测试资源选择器 - 本地文件存储
添加重新运行配置
您可以安排在主要运行完成后开始的重新运行并加载其结果,但可以使用不同的设备、操作或资源。
图 19.添加重新运行配置
开始试运行
输入测试运行所需的信息后,单击开始测试运行。如果所有信息都有效,则测试运行开始,您将被重定向到一个页面以查看测试运行的详细信息和进度。
图 20.开始测试运行
创建测试计划
测试计划用于定期创建测试运行。例如,每天下午 5 点运行 CTS 9.0。要创建新的测试计划,请单击创建新的测试计划。
图 21.创建测试计划
配置测试计划
输入测试计划的名称和您要添加的任何标签。然后选择要使用的时间表。
- 手动- 仅当用户单击测试计划列表页面中的运行测试计划时,测试计划才会创建测试运行。
- 定期- 测试计划将自动按选定的定期计划安排测试运行。例如,每天下午 5:00 安排一次测试运行。
- 自定义- 测试计划将根据输入的cron 表达式自动安排测试运行。例如,要在每天下午 5:00 安排一次测试运行,cron 表达式将为
0 17 * * *
。
图 22.配置测试计划
添加测试套件
通过单击+ 添加测试运行配置来添加您希望由测试计划安排的测试套件。从Name下拉列表中选择一个测试套件,然后单击Next step 。然后选择您要在其上运行测试的设备并单击Add Configuration 。您可以为每个测试计划添加多个配置。
图 23.配置测试运行
添加设备操作
添加您希望在每次测试运行之前执行的设备操作。有关更多详细信息,请参阅添加设备操作。
图 24.添加设备操作
设置测试资源
将测试资源添加到测试计划与将它们添加到单个测试运行相同。有关更多详细信息,请参阅设置测试资源。
图 25.设置测试资源
查看测试运行
试运行清单
在“测试运行”页面上查看计划测试运行的列表。单击查看以查看有关测试运行的更多详细信息。
您还可以通过在过滤器栏中输入字符串并按Enter键来过滤列表。您可以使用逗号分隔多个过滤器。过滤器返回在任何列中包含确切文本(无子字符串匹配)的所有行,不包括Status和Created 。
空过滤器返回所有行。目前无法过滤具有空值的行。
图 26.测试运行列表
试运行详情
您可以在此处查看测试运行的详细信息,例如状态、日志和结果。
图 27.测试运行详细信息
试运行状态
测试运行的进度显示在状态部分。如果有相关消息,例如下载进度、取消原因或错误消息,也会在此处显示。
图 28.测试运行状态
测试运行状态为:
- 待定- 正在下载所需资源。
- 排队- 当设备可用时,测试已准备好运行。
- Running - 测试正在分配的设备上运行。
- 已完成- 测试已完成并报告其结果。
- 已取消- 测试被用户取消或在尝试查找可用设备时超时。
- 错误- 发生错误,导致测试无法运行。
取消测试运行
如果测试运行尚未完成,您可以通过单击取消然后在确认对话框中单击是来取消它。如果测试运行保持在Queued状态的时间超过queue_timeout_seconds字段,它们也会自动取消。在运行状态下取消测试运行可能需要几分钟才能生效。
图 29.取消测试运行
试运行结果
测试运行完成后,将收集并显示结果。您可以通过单击每次运行的箭头来查看其他详细信息。单击查看输出文件以查看收集的测试工件,例如test_result.xml
和test_result_failures.html
。
图 30.测试运行结果
您可以在日志选项卡中查看实时主机和 Tradefed 日志。
图 31.日志选项卡
各个模块的结果位于“测试结果”选项卡上。
图 32.测试结果选项卡
您可以通过单击“测试资源”选项卡中的“打开”来下载用作测试资源的文件。
图 33.测试资源选项卡
要查看测试运行的详细信息,例如create_time ,请转到 Config 选项卡。
图 34.配置选项卡
高级功能
管理配置文件
Android Test Station 使用以YAML编写的配置文件来加载预定义的选项,例如测试、构建通道和设备操作。下面显示了一些选项的示例配置文件。
// example_file.yaml
tests:
- id : android.cts.9_0.arm
name: CTS 9.0 (ARM)
test_resource_defs:
- name: android-cts.zip
default_download_url: https://dl.google.com/dl/android/cts/android-cts-9.0_r7-linux_x86-arm.zip
test_resource_type: TEST_PACKAGE
command: cts
env_vars:
- name: TF_PATH
value: ${TF_WORK_DIR}/android-cts/tools:${TF_WORK_DIR}/android-cts/testcases
- name: LD_LIBRARY_PATH
value: ${TF_WORK_DIR}/android-cts/lib:${TF_WORK_DIR}/android-cts/lib64
setup_scripts:
output_file_patterns:
- android-cts/logs/latest/.*
- android-cts/results/latest/.*\.html
- android-cts/results/latest/compatibility_result\..*
- android-cts/results/latest/logo.png
- android-cts/results/latest/test_result.xml
result_file: test_result.xml
java_properties:
- name: CTS_ROOT
value: ${TF_WORK_DIR}
context_file_dir: android-cts/results/
context_file_pattern: '[\d_\.]+\.zip'
retry_command_line: retry --retry 0
runner_sharding_args: --shard-count ${TF_SHARD_COUNT}
build_channels:
- id: google_drive
name: Google Drive
provider_name: Google Drive
device_actions:
- id: flash
name: Flash
test_resource_defs:
- name: bootloader.img
test_resource_type: DEVICE_IMAGE
- name: radio.img
test_resource_type: DEVICE_IMAGE
- name: img.zip
test_resource_type: DEVICE_IMAGE
tradefed_target_preparers:
- class_name: com.android.tradefed.targetprep.RunHostCommandTargetPreparer
option_values:
- name: work-dir
values:
- ${TF_WORK_DIR}
- name: host-setup-command
values:
- adb -s $SERIAL reboot-bootloader
- fastboot -s $SERIAL flash bootloader bootloader.img
- fastboot -s $SERIAL flash radio radio.img
- fastboot -s $SERIAL reboot-bootloader
- fastboot -s $SERIAL -w update img.zip
- adb -s $SERIAL wait-for-device
- name: host-cmd-timeout
values:
- 10m
当您设置您的 Android 测试站实例时,您可以通过将其导出为文件来与其他用户共享您的配置。为此,请转到“设置”页面,然后单击右上角的“导出”。
图 35.配置文件管理
下载配置文件后,与其他用户共享该文件。他们可以通过单击导入并选择配置文件将配置文件添加到他们的 Android 测试站实例。
创建新设备操作
设备操作用于自动化设备设置过程。操作是在每次测试运行之前在每个运行测试的设备上执行的脚本,包括重试之前。要查看可用设备操作的列表,请转至设置页面并单击设备操作选项卡。已经配置了几个设备操作,例如重新启动和闪烁。
图 36.设备操作选项卡
添加新设备操作
单击新建设备操作。
图 37.新设备操作按钮
输入名称和描述。
图 38.设备操作名称
单击添加目标准备器。
输入Trade Federation Target Preparer 完整类名,例如
com.android.tradefed.targetprep.RunHostCommandTargetPreparer
。图 39.添加目标准备器
可以在com.android.tradefed.targetprep参考中找到可用目标准备者的列表。
图 40. Target Preparer 列表
添加与目标准备器一起使用的任何选项。要查看可用选项,请检查targetprep以获取 AOSP 中每个目标准备器的源代码:
图 41.操作选项示例
要添加选项,请单击添加目标准备器选项并输入所需的值。
图 42.动作命令示例
定义执行设备操作所需的测试资源,例如,构建用于闪烁的映像。要添加资源定义,请单击添加测试资源并填写必填字段。如果您知道文件所在的位置,则可以通过单击浏览提供默认下载 URL。如果目标准备者接受目录作为测试资源,请选择Decompress 。然后指定临时工作目录下的相对Destination目录和要解压的File Names 。如果没有给出文件名,则从测试资源中解压缩所有文件。
图 43.动作测试资源
单击更新。
图 44.动作保存更改
管理测试
编辑测试
要编辑已保存的测试,请转到“测试”页面,然后单击要修改的测试行上的“编辑”。更改测试配置后,单击更新。
图 45.编辑测试
添加新测试
要添加新测试,请转到测试页面并单击创建新测试。输入适当的信息并单击创建。
图 46.创建测试
图 47.复制测试
导出主机配置
配置主机后,您可以将主机的配置导出到文件。您可以将此文件上传到其他主机以复制保存的配置。
要导出主机的配置,请转到设置页面,然后单击右上角的导出。
图 48.导出主机配置
导入主机配置文件,进入设置页面,点击右上角的导入。
图 49.导入主机配置
使用本地文件和目录
从版本 R11 开始, $HOME/.ats_storage
目录中的文件可在 Android Test Station 中自动访问。将文件复制或移动到该目录中,然后您可以在安排测试运行时从“本地文件”选项卡中选择它。
cp /path/to/file $HOME/.ats_storage
图 50.从$HOME/.ats_storage
目录中选择一个文件
您可以使用--mount_local_path
标志将其他目录挂载到本地文件存储中。
mtt start --mount_local_path=/path/to/dir1 --mount_local_path=/path/to/dir2:renamed_dir2
图 51.安装在本地文件存储中的其他目录
启用多主机模式
使用多主机模式,用户可以使用单个 ATS 控制器主机来管理多个 ATS 工作主机上的设备和测试。
图 52.多主机模式架构
要启动 ATS 控制器,请使用以下命令:
mtt start --operation_mode=ON_PREMISE
检查控制器是否可访问 http://controller:8000。
要启动工作程序,请使用以下命令:
mtt start --control_server_url=http://controller.com:8000 --operation_mode=ON_PREMISE
如果您的网络不允许主机相互通信,您将需要按照下面有关 ATS 工作器的更高级设置说明进行操作。
使用 SSH 隧道连接两台主机。为主要和文件服务器端口选择端口,例如 9000 和 9006。
ssh -L ATS_PORT:localhost:8000 -L FS_PORT:localhost:8006 CONTROLLER_HOSTNAME
配置并启动 ATS。
DOCKER_GATEWAY_IP_ADDRESS=$(ip -4 addr show dev docker0 | grep -Eo 'inet [.0-9]+/' | grep -Eo '[.0-9]+')
socat tcp-listen:ATS_PORT,bind="${DOCKER_GATEWAY_IP_ADDRESS}",reuseaddr,fork tcp-connect:127.0.0.1:ATS_PORT &
socat tcp-listen:FS_PORT,bind="${DOCKER_GATEWAY_IP_ADDRESS}",reuseaddr,fork tcp-connect:127.0.0.1:FS_PORT &
mtt start --control_server_url=${DOCKER_GATEWAY_IP_ADDRESS}:ATS_PORT \ --control_file_server_url=${DOCKER_GATEWAY_IP_ADDRESS}:FS_PORT \ --operation_mode=ON_PREMISE
支持
错误报告
您对 Android Test Station 的贡献有助于改进该工具的开发,我们需要您的意见!有关最新版本的详细信息,请参阅ATS 发行说明。要报告错误或提供建议,请提交错误报告。合作伙伴应通过其合作伙伴渠道报告错误或建议。