OmniLab ATS 支持 Cuttlefish 虚拟设备,让您无需使用实体 Android 设备即可运行测试。Cuttlefish 适用于测试与硬件无关的功能。开始使用虚拟设备之前,请按照用户指南安装 OmniLab ATS。
OmniLab ATS 支持两种模式的虚拟设备:本地和远程。下表对这两种模式进行了比较。
本地虚拟设备 | 远程虚拟设备 |
---|---|
在 ATS worker 主机上运行 | 在 ATS worker 主机可以通过 SSH 访问的远程主机上运行 |
基于 x86 | 可以是 x86 或 ARM,具体取决于主机的架构 |
更易于设置 | 设置更复杂 |
本地和远程虚拟设备可以独立启用。有关每种模式的详细信息,请参阅
设置本地虚拟设备
本节介绍设置 OmniLab ATS 以使用本地虚拟设备的步骤。
安装 Cuttlefish 依赖项
运行以下命令以确保加载必要的内核模块
sudo modprobe -a kvm tun vhost_net vhost_vsock
启动使用本地虚拟设备的 OmniLab ATS
启动 OmniLab ATS 之前,请确保所有 Cuttlefish 实例均已停止。OmniLab ATS 会在测试周期内自动启动和停止虚拟设备,而现有的 Cuttlefish 实例会与 OmniLab ATS 管理的实例冲突。如需详细了解如何停止 Cuttlefish 实例,请参阅停止 Cuttlefish。
要启用本地虚拟设备,请运行
mtt start --max_local_virtual_devices N
N
是 OmniLab ATS 可以同时分配的最大虚拟设备数量。默认数量为 0。
如果命令因缺少设备节点而失败,请按照错误消息中的步骤加载内核模块。如果仍然失败,请重启计算机。
设置远程虚拟设备
本节介绍设置 OmniLab ATS 以使用远程虚拟设备的步骤。
安装 Cuttlefish 依赖项
要安装 Cuttlefish 依赖项,请按照以下步骤操作。
在远程主机上安装 Debian 软件包,步骤请见Cuttlefish > 入门。
在远程主机上配置最大虚拟设备数量,步骤如下
- 使用 root 权限编辑
/etc/default/cuttlefish-host-resources
。 - 将
num_cvd_accounts
设置为允许在此主机上的最大虚拟设备数量。 - 运行
sudo systemctl restart cuttlefish-host-resources
。 - 运行
ifconfig
并验证cvd-wtap-*
接口的数量。
- 使用 root 权限编辑
创建 SSH 账号
由于 OmniLab ATS 主机通过 SSH 连接到远程主机,因此您必须在远程主机上准备一个 SSH 账号。由于 OmniLab ATS 会操作 HOME 目录中的文件,因此我们建议您创建一个专用账号。
OmniLab ATS 主机需要一对 SSH 密钥才能免密码登录远程主机。以下步骤介绍如何设置 SSH 密钥
- 要生成私钥和公钥,请在 OmniLab ATS 主机上运行
ssh-keygen
。 - 在远程主机上,上传公钥并将其附加到
~/.ssh/authorized_keys
。
如果您的 SSH 账号与用于安装 Cuttlefish 依赖项的账号不同,要允许 SSH 账号启动 Cuttlefish,请在远程主机上运行以下命令
sudo usermod -aG kvm,cvdnetwork,render $USER
启动使用远程虚拟设备的 OmniLab ATS
启动 OmniLab ATS 之前,请确保所有 Cuttlefish 实例均已停止。OmniLab ATS 会在测试周期内自动启动和停止虚拟设备,而现有的 Cuttlefish 实例会与 OmniLab ATS 管理的实例冲突。如需详细了解如何停止 Cuttlefish 实例,请参阅停止 Cuttlefish。
为了获得更好的性能,我们建议在局域网中设置 OmniLab ATS 主机和远程主机。
要启用远程虚拟设备,请在 OmniLab ATS 主机上运行以下命令
mtt start --remote_virtual_devices USER@HOST/N \
--remote_ssh_key KEY
USER
是 SSH 账号名称。
HOST
是远程主机的 IPv4 地址。
N
是 OmniLab ATS 可以同时分配的最大虚拟设备数量。
KEY
是在 OmniLab ATS 主机上的私有 SSH 密钥的路径。
该命令会在启动 OmniLab ATS 之前测试与远程主机的连接。如果控制台上显示警告消息(例如 The specified --remote_virtual_devices and --remote_ssh_key are invalid.
),您应该检查您的 SSH 设置。
为避免资源冲突,一个 OmniLab ATS 主机最多可以连接到一个远程主机。多个 OmniLab ATS 主机不能同时连接到一个远程主机。
使用虚拟设备运行测试
本节介绍在本地或远程虚拟设备上运行测试的步骤。
选择设备
在设备列表中,OmniLab ATS 将虚拟设备显示为占位符,而不是其实际序列号。本地虚拟设备的占位符格式为主机名:local-virtual-device-ID;远程虚拟设备的占位符格式为remote-virtual-ADDRESS-ID。状态为可用或已分配。状态为可用的占位符表示虚拟设备未运行,可以分配用于测试。
图 1. 选择虚拟设备
添加设备操作
如果您选择至少一个虚拟设备,则关联的设备操作应会自动添加到列表中。该操作包含创建虚拟设备所需的 TradeFed 参数和测试资源。
图 2. 本地虚拟设备的设备操作
图 3. 远程虚拟设备的设备操作
设置测试资源
Cuttlefish 虚拟设备需要三个测试资源:虚拟机工具、镜像和 Acloud。在典型的 Cuttlefish 版本(例如,aosp_cf_x86_64_only_phone-userdebug
,位于 ci.android.com 上)中,虚拟机工具打包在 cvd-host_package.tar.gz
中,镜像位于 aosp_cf_x86_64_phone-img-*.zip
中。Acloud 二进制文件内置于 OmniLab ATS 中,并且与所有版本的 Cuttlefish 兼容。Acloud 二进制文件的默认下载网址仅在调试目的下需要更改。
图 4. 虚拟设备的测试资源
查看测试运行
设备日志(包括 kernel.log
、host_log.txt
和 launcher.log
)收集在输出文件文件夹中。点击查看输出文件即可查看。
图 5. 测试运行结果