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 執行個體,請參閱「Stop 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 金鑰,才能在沒有密碼的情況下登入遠端主機。下列步驟說明如何設定安全殼層金鑰:

  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 可同時分配的虛擬裝置數量上限。

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 (遠端虛擬裝置)。狀態為「可用」或「已分配」可用狀態中的預留位置表示虛擬裝置未執行,可用於測試。

選取虛擬裝置

圖 1. 選取虛擬裝置

新增裝置動作

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

本機虛擬裝置動作

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

遠端虛擬裝置動作

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

設定測試資源

Cuttlefish 虛擬裝置需要三項測試資源:虛擬機器工具、映像檔和 Acloud。在一般的 Cuttlefish 方案 (例如 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.loghost_log.txtlauncher.log) 會收集在輸出檔案資料夾中。按一下「查看輸出檔案」即可查看這些檔案。

測試執行結果

圖 5. 測試執行結果