Android 9 包含供應商測試套件 (VTS) 基礎架構,可在搭載 AOSP 通用系統映像檔 (GSI) 的合作夥伴裝置上,自動測試 VTS、CTS 或其他測試。先前執行這些測試時,必須仰賴大量手動操作;新的 VTS 測試基礎架構則可支援每天在多部裝置上執行多次自動化測試。
建築
VTS 自動化測試基礎架構採用以下架構:
當測試觸發時,VTS 自動化測試基礎架構會執行下列任務:
- 從不同位置擷取建構構件和測試資源:
- 合作夥伴 Android 版本 (PAB)。適用於 GSI、VTS 架構和其他一些版本。
- 本機檔案系統、Google Cloud Storage 或其他供應商專屬的建構系統。適用於未將版本儲存在 Google 雲端的合作夥伴。
- 將建構成果 (來自裝置) 和 GSI (來自 Android 開放原始碼計畫) 刷入已連結的裝置。
- 使用本機 TradeFed 或雲端中的 TradeFed 執行 VTS 測試。
- 將測試結果回報至 VTS 資訊主頁
這個程序由 VTS 主機控制器 (HC) 協調,這是研究室中的機器,可指揮所有已連線的測試裝置行為。HC 負責擷取最新版本、將其刷新至裝置,以及叫用測試 (在本機或透過指揮官)。它也會與雲端排程器進行通訊,並將流量導向排程器和在 HC 上執行的 TradeFed 例項 (或其他某些測試套件) 之間。如要進一步瞭解主控器,請參閱「主控器架構」。
資源供應者
自動化測試需要系統建構、測試檔案和 VTS 構件等資源。雖然可以從原始碼建構這些項目,但從樹狀結構頂端定期建構這些項目,然後發布可供下載的構件,會更容易。
合作夥伴可以透過下列位置存取自動化資源:
- 合作夥伴 Android 版本。按帳戶分別授予程式輔助存取權。
- 本機檔案系統 (或類似系統)。適用於未使用合作夥伴 Android 版本的合作夥伴。
為了日後在裝置上刷新映像檔,資源會納入兩種選項的建構提供者,這些提供者是從單一 build_provider.py
延伸而來,該 build_provider.py
會將建構檔案儲存在本機暫時目錄中。
合作夥伴 Android 版本
在 Android 8.1 以下版本中,Android 合作夥伴必須前往合作夥伴 Android 建構網站 (https://partner.android.com/build),前往自己的帳戶,然後透過使用者介面擷取最新的系統映像檔。為協助合作夥伴避免這個耗時且費時的程序,Android 9 支援在提供適當的憑證時,自動從 PAB 下載這些資源。
建立存取權
程式存取權會使用 Google API 上的 OAuth 2.0 存取必要的 RPC。如要使用標準方法產生 OAuth2 憑證,合作夥伴必須與 Google 設定用戶端 ID/密鑰組合。當 PartnerAndroidBuildClient
首次指向該機密時,系統會開啟瀏覽器視窗,讓使用者登入 Google 帳戶,進而產生繼續操作所需的 OAuth2 憑證。憑證 (存取權杖和重新整理權杖) 會儲存在本機,這表示合作夥伴只需登入一次。
網址的 POST 要求
按一下 PAB 中的資源連結,系統會傳送 POST 要求,其中包含該資源的必要資料,包括:
- 版本 ID、建構目標
- 資源名稱
- 分支版本
- 候選版名稱,以及候選版是否為內部版本
buildsvc
RPC 的 downloadBuildArtifact
方法會收到 POST 要求,並傳回可用於存取資源的網址。
- 對於 Clockwork Companion APK 資源,網址是託管在 PAB 上的可讀網址 (該網址受到驗證保護,且可透過適當的 OAuth2 憑證存取)。
- 對於其他資源,網址是來自內部 Android Build API 的長網址 (五分鐘後會過期)。
取得網址
為避免跨網站偽造要求,buildsvc
RPC 需要將 XSRF 權杖與其他參數一併 POST。雖然這類權杖可讓程序更安全,但也讓程式輔助存取變得更加困難,因為權杖 (僅適用於 PAB 頁面的 JavaScript) 現已成為存取權的必要條件。
為避免這個問題,Android 9 重新設計了所有檔案 (不只是 APK) 的網址命名配置,以便使用可預測的網址名稱存取構件清單和構件網址。現在 PAB 採用方便的網址格式,讓合作夥伴下載資源;HC 指令碼可輕鬆下載這些 APK,因為它們知道網址格式,且 HC 不需要 buildsvc
RPC,因此可略過 XSRF/cookie 問題。
本機檔案系統
如果目錄包含成果集清單 (或 ZIP 檔案),建構提供者會根據目錄中的內容設定相關圖片。您可以使用 gsutil 工具,將檔案從 Google Cloud Storage 複製到本機目錄。
Flash 版本
最新的裝置映像檔下載至主機後,必須將這些映像檔刷新到裝置上。這項作業會使用標準 adb
和 fastboot
指令和 Python 子程序,並根據建構提供者儲存的暫存檔案路徑執行。
支援的動作:
- 僅刷新 GSI
- 從主要系統閃爍個別圖片 (例如
fastboot flash boot boot.img
) - 從主系統刷新所有映像檔。示例:
fastboot flashall
(使用內建的flashall
公用程式)fastboot flash
(一次一個)
執行測試
在 Android 9 中,VTS 自動化測試基礎架構僅支援 TradeFed 測試輔助程式,但日後可擴充支援其他輔助程式。
準備好裝置後,您可以使用下列其中一個選項叫用測試:
- 在本機使用 TradeFed 時,請在主機控制器中使用
test
指令,該指令會採用 VTS 測試計畫的名稱 (例如vts-selftest
) 並執行測試。 - 使用 TradeFed 叢集 (可選擇連線至 MTT) 時,請在主控台控制台中使用
lease
指令,查看未執行完的測試。
如果使用 TradeFedCluster,TradeFed 會在本機上做為遠端管理員執行。如果不是,則會使用 Python 子程序叫用測試。
報表結果
VtsMultiDeviceTest
會自動將測試結果回報至部分 VTS 資訊主頁專案。