Android 9 包含供應商測試套件 (VTS) 基礎架構,可在搭載 AOSP 通用系統映像檔 (GSI) 的合作夥伴裝置上,自動測試 VTS、CTS 或其他測試。過去,執行這些測試需要大量手動操作;新的 VTS 測試基礎架構旨在支援自動化測試,每天可在多部裝置上執行多次測試。
建築
VTS 自動化測試基礎架構採用下列架構:
觸發測試時,VTS 自動化測試基礎架構會執行下列工作:
- 從不同位置擷取建構構件和測試資源:
- 合作夥伴 Android 版本 (PAB)。適用於 GSI、VTS 架構和其他部分版本。
- 本機檔案系統、Google Cloud Storage 或其他廠商專屬的建構系統。合作夥伴未將建構作業儲存在 Google Cloud 中。
- 將建構構件 (來自裝置) 和 GSI (來自 Android 開放原始碼計畫) 刷入已連線的裝置。
- 使用本機 TradeFed 或雲端 TradeFed 執行 VTS 測試。
- 將測試結果回報給 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 版本
將最新的裝置映像檔下載到主機後,必須將這些映像檔更新到裝置上。這是透過標準的 adb
和 fastboot
指令,以及 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 資訊主頁專案。