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