自動化測試基礎設施

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

建築學

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

Automated test architecture

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

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

  1. 從不同位置獲取構建工件和測試資源:
    • 合作夥伴 Android 構建 (PAB) 。適用於 GSI、VTS 框架和其他一些構建。
    • 本地文件系統、谷歌云存儲或其他供應商特定的構建系統。適用於不在 Google 雲中存儲構建的合作夥伴。
  2. Flash 將工件(來自設備)和 GSI(來自 AOSP)構建到連接的設備上。
  3. 使用本地 TradeFed 或云中的 TradeFed 運行 VTS 測試。
  4. 向 VTS 儀表板報告測試結果

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

資源提供者

自動化測試需要係統構建、測試文件和 VTS 工件等資源。雖然可以從源代碼構建它們,但更容易定期從樹尖構建它們,然後發布工件以供下載。

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

  • 合作夥伴 Android 構建。基於每個帳戶授予的程序化訪問權限。
  • 本地文件系統(或類似的)。對於不使用 Partner Android Build 的合作夥伴。

為了稍後用於刷新設備,資源包括兩個選項的構建提供程序,從將構建存儲在本地臨時目錄中的單個build_provider.py擴展。

合作夥伴 Android 構建

在 Android 8.1 及更低版本中,Android 合作夥伴需要訪問 Partner 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 需要 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 儀表板項目。