自動化測試基礎設施

Android 9 包含供應商測試套件 (VTS) 基礎設施,用於在執行 AOSP 通用系統映像 (GSI) 的合作夥伴裝置上自動測試 VTS、CTS 或其他測試。以前,執行這些測試是一項高度手動的操作;新的 VTS 測試基礎設施旨在支援每天在多個裝置上進行多次自動化測試。

建築學

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

Automated test architecture

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

當測試被觸發時,VTS自動化測試基礎設施執行以下任務:

  1. 從不同位置取得建置工件和測試資源:
    • 合作夥伴 Android 建置 (PAB) 。適用於 GSI、VTS 框架和其他一些建置。
    • 本機檔案系統、Google Cloud Storage 或其他特定於供應商的建置系統。適用於不在 Google 雲端儲存版本的合作夥伴。
  2. 將建置工件(來自裝置)和 GSI(來自 AOSP)快閃記憶體到連接的裝置上。
  3. 使用本地 TradeFed 或雲端中的 TradeFed 執行 VTS 測試。
  4. 將測試結果報告給 VTS 儀表板

該過程由 VTS 主機控制器 (HC) 協調,該控制器是實驗室中的一台機器,負責指導所有被測連接設備的行為。 HC 負責取得最新版本,將它們刷新到裝置上,並呼叫測試(本地或透過指揮官)。它還與雲端調度程序通信,並引導調度程序和 HC 上運行的 TradeFed 實例(或其他一些工具)之間的流量。有關主機控制器的詳細信息,請參閱主機控制器架構

資源提供者

自動化測試需要係統建置、測試檔案和 VTS 工件等資源。雖然可以從原始程式碼建立它們,但定期從樹尖建立它們然後發布工件以供下載會更容易。

合作夥伴可以使用以下位置存取自動化資源:

  • 合作夥伴 Android 建置.按帳戶授予編程存取權限。
  • 本機檔案系統(或類似的)。對於不使用合作夥伴 Android 版本的合作夥伴。

為了稍後刷新裝置時使用,資源包括兩個選項的建置提供程序,從將建置儲存在本機暫存目錄中的單一build_provider.py擴充。

合作夥伴 Android 構建

在 Android 8.1 及更低版本中,Android 合作夥伴需要造訪合作夥伴 Android Build 網站 ( https://partner.android.com/build ),導覽至其帳戶,並透過使用者介面取得最新的系統映像。為了幫助合作夥伴避免這種緩慢且費力的流程,Android 9 支援在提供適當的憑證時自動從 PAB 下載這些資源。

建立存取權限

程式存取使用 Google API 上的 OAuth2 來存取所需的 RPC。使用產生 OAuth2 憑證的標準方法,合作夥伴必須與 Google 設定客戶端 ID/秘密對。當PartnerAndroidBuildClient第一次指向該機密時,它會開啟一個瀏覽器窗口,供使用者登入其 Google 帳戶,產生繼續操作所需的 OAuth2 憑證。憑證(存取令牌和刷新令牌)儲存在本地,這意味著合作夥伴只需登入一次。

URL 的 POST 請求

點擊 PAB 中的資源連結會傳送一個 POST 請求,其中包含該資源的必要數據,包括:

  • 建置 ID、建置目標
  • 資源名稱
  • 分支
  • 發布候選名稱以及候選是否為內部版本

POST 請求由buildsvc RPC 的downloadBuildArtifact方法接收,該方法傳回可用於存取資源的 URL。

  • 對於 Clockwork Companion APK 資源,URL 是 PAB 上託管的可讀 URL(受身份驗證保護,可以使用適當的 OAuth2 憑證進行存取)。
  • 對於其他資源,URL 是來自內部 Android Build API 的長且不受保護的 URL(五分鐘後過期)。

取得網址

為了避免跨站點請求偽造, buildsvc RPC 需要使用其他參數來 POST 一個 XSRF 令牌。雖然此令牌使流程更加安全,但它也使程式存取變得更加困難,因為現在存取也需要令牌(僅在 PAB 頁面的 JavaScript 中可用)。

為了避免此問題,Android 9 重新設計了所有檔案(而不僅僅是 APK)的 URL 命名方案,以使用可預測的 URL 名稱來存取工件清單和工件 URL。 PAB現在使用方便的URL格式,使合作夥伴能夠下載資源; HC 腳本可以輕鬆下載這些 APK,因為 URL 格式已知,且 HC 可以繞過 XSRF/cookie 問題,因為它不需要buildsvc RPC。

本機檔案系統

給定一個包含工件清單(或 zip 檔案)的目錄,建立提供者根據目錄中的內容設定相關影像。您可以使用gsutil工具將檔案從 Google Cloud Storage 複製到本機目錄。

快閃記憶體建構

將最新的裝置映像下載到主機後,必須將這些映像刷新到裝置上。這是使用標準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 儀表板專案。