Android 測試站中的虛擬裝置

Android Test Station 支援 Cuttlefish 虛擬裝置,可讓您在沒有實體 Android 裝置的情況下執行測試。Cuttlefish 適合用於測試與硬體無關的函式。開始使用虛擬裝置之前,請先按照使用手冊安裝 Android Test Station。

ATS 支援本機與遠端兩種虛擬裝置。下表提供這兩種模式的比較。

本機虛擬裝置 遠端虛擬裝置
在 ATS 工作站主機上執行 這個外掛程式能在 ATS 工作站主機可透過 SSH 存取的遠端主機上執行
x86 型 視主機架構而定,可以是 x86 或 ARM
設定簡單 設定程序較為複雜

本機和遠端虛擬裝置可以個別啟用。如要進一步瞭解各種模式,請參閱:

設定本機虛擬裝置

本節說明如何在本機虛擬裝置設定 ATS 的設定步驟。

安裝 Cuttlefish 依附元件

執行下列指令,確保載入必要的核心模組:

sudo modprobe -a kvm tun vhost_net vhost_vsock

使用本機虛擬裝置啟動 Android 測試站

啟動 ATS 之前,請確認所有 Cuttlefish 執行個體均已停止。 在測試週期期間,ATS 會自動啟動及停止虛擬裝置,而現有的 Cuttlefish 執行個體會與 ATS 管理的執行個體發生衝突。如要進一步瞭解如何停止 Cuttlefish 執行個體,請參閱 Stop Cuttlefish

如要啟用本機虛擬裝置,請執行以下指令:

mtt start --max_local_virtual_devices N

N 是 ATS 可同時分配的虛擬裝置數量上限。預設數值為 0。

如果指令因缺少裝置節點而失敗,請按照錯誤訊息中的步驟載入核心模組。如果還是失敗,請重新啟動機器。

設定遠端虛擬裝置

本節說明如何為遠端虛擬裝置設定 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 帳戶

由於 ATS 主機透過 SSH 連線至遠端主機,因此您必須在遠端主機上準備 SSH 帳戶。當 ATS 操控 HOME 目錄中的檔案時,建議您建立專屬帳戶。

ATS 主機需要一組安全殼層金鑰,才能在沒有密碼的情況下登入遠端主機。下列步驟說明如何設定安全殼層金鑰:

  1. 如要產生私密金鑰和公開金鑰,請在 ATS 主機上執行 ssh-keygen
  2. 將公開金鑰上傳並附加至遠端主機~/.ssh/authorized_keys

如果您的 SSH 帳戶和安裝 Cuttlefish 依附元件的帳戶不同,為了允許 SSH 帳戶啟動 Cuttlefish,請在遠端主機上執行下列指令:

sudo usermod -aG kvm,cvdnetwork,render $USER

透過遠端虛擬裝置啟動 ATS

啟動 ATS 之前,請確認所有 Cuttlefish 執行個體均已停止。 在測試週期期間,ATS 會自動啟動及停止虛擬裝置,而現有的 Cuttlefish 執行個體會與 ATS 管理的執行個體發生衝突。如要進一步瞭解如何停止 Cuttlefish 執行個體,請參閱 Stop Cuttlefish

為獲得更好的效能,建議您在區域網路中設定 ATS 主機和遠端主機。

如要啟用遠端虛擬裝置,請在 ATS 主機上執行下列指令:

mtt start --remote_virtual_devices USER@HOST/N \
--remote_ssh_key KEY

USER 是 SSH 帳戶名稱。

HOST 是遠端主機的 IPv4 位址。

N 是 ATS 可同時分配的虛擬裝置數量上限。

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

這個指令會在啟動 ATS 之前測試與遠端主機的連線。 如果控制台顯示 The specified --remote_virtual_devices and --remote_ssh_key are invalid. 等警告訊息,請檢查 SSH 設定。

為避免資源衝突,ATS 主機最多只能連線至一個遠端主機。無法同時連線至多台 ATS 主機。

使用虛擬裝置執行測試

本節說明在本機或遠端虛擬裝置上執行測試的步驟。

選取裝置

在裝置清單中,ATS 會將虛擬裝置顯示為預留位置,而非實際序號。如果是本機虛擬裝置,預留位置會以 HOSTNAME:local-virtual-device-ID 的格式顯示;如果是遠端虛擬裝置,則會採用 remote-virtual-ADDRESS-ID。狀態可以是「Available」或「Allocations」。「Available」狀態的預留位置表示虛擬裝置並未執行,可以為測試分配。

選取虛擬裝置

圖 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 二進位檔內建在 ATS 中,且與所有 Cuttlefish 版本相容。Acloud 二進位檔的預設下載網址只需為了偵錯目的變更網址即可。

虛擬裝置測試資源

圖 4. 測試虛擬裝置的資源

查看測試執行作業

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

測試執行結果

圖 5. 測試執行結果