自動化測試基礎架構

Android 9 包含供應商測試套件 (VTS) 基礎架構,可在搭載 AOSP 通用系統映像檔 (GSI) 的合作夥伴裝置上,自動測試 VTS、CTS 或其他測試。先前執行這些測試時,必須仰賴大量手動操作;新的 VTS 測試基礎架構則可支援每天在多部裝置上執行多次自動化測試。

建築

VTS 自動化測試基礎架構採用以下架構:

自動化測試架構

圖 1. VTS 自動化測試基礎架構架構

當測試觸發時,VTS 自動化測試基礎架構會執行下列任務:

  1. 從不同位置擷取建構構件和測試資源:
    • 合作夥伴 Android 版本 (PAB)。適用於 GSI、VTS 架構和其他一些版本。
    • 本機檔案系統、Google Cloud Storage 或其他供應商專屬的建構系統。適用於未將版本儲存在 Google 雲端的合作夥伴。
  2. 將建構成果 (來自裝置) 和 GSI (來自 Android 開放原始碼計畫) 刷入已連結的裝置。
  3. 使用本機 TradeFed 或雲端中的 TradeFed 執行 VTS 測試。
  4. 將測試結果回報至 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 版本

最新的裝置映像檔下載至主機後,必須將這些映像檔刷新到裝置上。這項作業會使用標準 adbfastboot 指令和 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 資訊主頁專案。