自動化測試基礎設施

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

建築學

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

Automated test architecture

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

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

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

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

資源提供者

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

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

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

在以後閃爍設備的使用,資源包括兩個選項構建商,從單一的擴大build_provider.py是存儲在構建本地臨時目錄。

合作夥伴 Android Build

在Android的8.1和更低的排放量,要求Android的合作夥伴,合作夥伴Android組建網站(參觀https://partner.android.com/build通過用戶界面),導航到他們的帳戶,並獲取最新的系統映像。為幫助合作夥伴避免這種緩慢且費力的過程,Android 9 支持在提供適當憑據時自動從 PAB 下載這些資源。

建立訪問

編程訪問使用 Google API 上的 OAuth2 來訪問所需的 RPC。使用標準方法產生的OAuth2憑證,合作夥伴必須設置客戶端ID /隱匿對與谷歌。當PartnerAndroidBuildClient指向那個秘密的第一次,它會打開用戶登錄到自己的谷歌賬戶,產生前進所需的OAuth2憑據的瀏覽器窗口。憑據(訪問令牌和刷新令牌)存儲在本地,這意味著合作夥伴只需登錄一次。

對 URL 的 POST 請求

單擊 PAB 中的資源鏈接會發送一個 POST 請求,其中包含該資源的必要數據,包括:

  • 構建ID,構建目標
  • 資源名稱
  • 分支
  • 發布候選名稱以及候選是否是內部構建

POST請求被接收到的downloadBuildArtifact所述的方法buildsvc RPC,它返回可用於訪問資源的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工具從谷歌雲存儲的文件複製到本地目錄。

閃爍的構建

將最新的設備映像下載到主機後,必須將這些映像刷入設備。這是通過使用標準完成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 子進程調用測試。

報告結果

測試結果自動報告給一些VTS儀表板項目VtsMultiDeviceTest