OmniLab ATS 中的虚拟设备

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 依赖项,请按照以下步骤操作。

  1. 在远程主机上安装 Debian 软件包,步骤请见Cuttlefish > 入门

  2. 在远程主机上配置最大虚拟设备数量,步骤如下

    1. 使用 root 权限编辑 /etc/default/cuttlefish-host-resources
    2. num_cvd_accounts 设置为允许在此主机上的最大虚拟设备数量。
    3. 运行 sudo systemctl restart cuttlefish-host-resources
    4. 运行 ifconfig 并验证 cvd-wtap-* 接口的数量。

创建 SSH 账号

由于 OmniLab ATS 主机通过 SSH 连接到远程主机,因此您必须在远程主机上准备一个 SSH 账号。由于 OmniLab ATS 会操作 HOME 目录中的文件,因此我们建议您创建一个专用账号。

OmniLab ATS 主机需要一对 SSH 密钥才能免密码登录远程主机。以下步骤介绍如何设置 SSH 密钥

  1. 要生成私钥和公钥,请在 OmniLab ATS 主机上运行 ssh-keygen
  2. 在远程主机上,上传公钥并将其附加到 ~/.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。状态为可用已分配。状态为可用的占位符表示虚拟设备未运行,可以分配用于测试。

Select Virtual Devices

图 1. 选择虚拟设备

添加设备操作

如果您选择至少一个虚拟设备,则关联的设备操作应会自动添加到列表中。该操作包含创建虚拟设备所需的 TradeFed 参数和测试资源。

Local Virtual Device Actions

图 2. 本地虚拟设备的设备操作

Remote Virtual Device Actions

图 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 二进制文件的默认下载网址仅在调试目的下需要更改。

Virtual Device Test Resources

图 4. 虚拟设备的测试资源

查看测试运行

设备日志(包括 kernel.loghost_log.txtlauncher.log)收集在输出文件文件夹中。点击查看输出文件即可查看。

Test Run Results

图 5. 测试运行结果