OmniLab ATS 中的虛擬裝置

OmniLab ATS 支援 Cuttlefish 虛擬裝置,可讓您在沒有 Android 實體裝置的情況下執行測試。Cuttlefish 適合測試與硬體無關的函式。開始使用虛擬裝置前,請按照使用者指南安裝 OmniLab ATS。

OmniLab ATS 支援兩種模式的虛擬裝置:本機和遠端。下表比較這兩種模式。

本機虛擬裝置 遠端虛擬裝置
在 ATS 工作站主機上執行 在 ATS 工作站主機可透過 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. 按照「Cuttlefish > 開始使用」一文中的步驟,在遠端主機上安裝 Debian 套件。

  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. 如要產生私密金鑰和公開金鑰,請在 ssh-keygen OmniLab ATS 主機上執行
  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 可同時分配的虛擬裝置數量上限。

KEYOmniLab ATS 主機上私密安全殼層金鑰的路徑。

這項指令會在啟動 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」。狀態為「可用」或「已分配」。處於「Available」狀態的預留位置表示虛擬裝置未執行,可分配給測試。

選取「虛擬裝置」

圖 1. 選取虛擬裝置

新增裝置動作

如果選取至少一個虛擬裝置,相關聯的裝置動作應會自動新增至清單。這項動作包含建立虛擬裝置所需的 TradeFed 參數和測試資源。

本機虛擬裝置動作

圖 2. 本機虛擬裝置的裝置動作

遠端虛擬裝置動作

圖 3. 遠端虛擬裝置的裝置動作

設定測試資源

Cuttlefish 虛擬裝置需要三項測試資源:虛擬機器工具、映像檔和 Acloud。在典型的 Cuttlefish 建構版本 (例如 ci.android.com 上的 aosp_cf_x86_64_only_phone-userdebug),虛擬機器工具會封裝在 cvd-host_package.tar.gz 中,映像檔則位於 aosp_cf_x86_64_only_phone-img-*.zip。Acloud 二進位檔建構於 OmniLab ATS,且與所有版本的 Cuttlefish 相容。只有在偵錯時,才需要變更 Acloud 二進位檔的預設下載網址。

虛擬裝置測試資源

圖 4. 虛擬裝置測試資源

查看測試執行作業

裝置記錄 (包括 kernel.loghost_log.txtlauncher.log) 會收集在輸出檔案資料夾中。按一下「查看輸出檔案」即可查看。

測試執行作業結果

圖 5. 測試執行結果