自動化測試基礎架構

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

建築

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

自動化測試架構

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

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

  1. 從不同位置擷取建構構件和測試資源:
    • 合作夥伴 Android 版本 (PAB)。適用於 GSI、VTS 架構和其他部分版本。
    • 本機檔案系統、Google Cloud Storage 或其他廠商專屬的建構系統。合作夥伴未將建構作業儲存在 Google Cloud 中。
  2. 將建構構件 (來自裝置) 和 GSI (來自 Android 開放原始碼計畫) 刷入已連線的裝置。
  3. 使用本機 TradeFed 或雲端 TradeFed 執行 VTS 測試。
  4. 將測試結果回報給 VTS 資訊主頁

這項程序由 VTS 主機控制器 (HC) 協調,這是實驗室中的機器,可控管所有連線測試裝置的行為。HC 負責擷取最新版本、將版本刷入裝置,以及叫用測試 (在本機或透過指揮中心)。此外,它也會與雲端排程器通訊,並在排程器與 HC 上執行的 TradeFed 執行個體 (或其他一些安全防護措施) 之間導向流量。如要瞭解主機控制器,請參閱主機控制器架構

資源供應商

自動化測試需要系統建構版本、測試檔案和 VTS 構件等資源。雖然可以從來源建構這些項目,但建議您定期從樹狀結構頂端建構這些項目,然後發布構件供下載。

合作夥伴可透過下列位置存取自動化資源:

  • 合作夥伴 Android 版本。程式輔助存取權是按帳戶授予。
  • 本機檔案系統 (或類似項目)。適用於未使用合作夥伴 Android 版本的合作夥伴。

如要在稍後用於刷機,資源會包含兩種選項的建構供應商,從單一 build_provider.py 擴充,將建構作業儲存在本機暫時目錄中。

合作夥伴 Android 版本

在 Android 8.1 以下版本中,Android 合作夥伴必須前往「合作夥伴 Android 建構」網站 (https://partner.android.com/build),導覽至自己的帳戶,然後透過使用者介面擷取最新系統映像檔。為協助合作夥伴避免這種緩慢且耗費人力的程序,Android 9 支援在提供適當憑證時,自動從 PAB 下載這些資源。

建立存取權

程式輔助存取權會使用 Google API 上的 OAuth2,存取必要的 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 需要與其他參數一起 POST XSRF 權杖。雖然這個權杖可讓程序更安全,但現在也需要權杖 (僅適用於 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 資訊主頁專案。