自動化測試基礎架構

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 中執行的 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 上使用 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 需要將 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 資訊主頁專案。