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 依赖项,请按以下步骤操作。
按照 Cuttlefish > 入门中的步骤,在远程主机上安装 Debian 软件包。
按照以下步骤配置远程主机上的虚拟设备数量上限:
- 使用 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 会将虚拟设备显示为占位符,而不是其实际序列号。对于本地虚拟设备,占位符以 HOSTNAME:local-virtual-device-ID 的格式显示,对于远程虚拟设备,以 remote-virtual-ADDRESS-ID 的格式显示。HOSTNAME:local-virtual-device-IDHOSTNAME:local-virtual-device-ID状态是“Available”或“Allocated”。“Available”状态占位符表示虚拟设备未运行并且可以分配给测试。
图 1. 选择虚拟设备
添加设备操作
如果您至少选择一个虚拟设备,则关联的设备操作应该会自动添加到列表中。操作包含创建虚拟设备所需的 TradeFed 参数和测试资源。
图 2. 本地虚拟设备的设备操作
图 3. 远程虚拟设备的设备操作
设置测试资源
Cuttlefish 虚拟设备需要三项测试资源,即虚拟机工具、映像和 Acloud。在典型的 Cuttlefish build(例如,ci.android.com 上的 aosp_cf_x86_64_phone
)中,虚拟机工具封装在 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. 测试运行结果