Android 9包括供應商測試套件(VTS)基礎結構,用於在運行AOSP通用系統映像(GSI)的伙伴設備上自動測試VTS,CTS或其他測試。以前,運行這些測試是高度手動的操作;新的VTS測試基礎結構旨在支持一天在多個設備上進行多次自動測試。
建築
VTS自動化測試基礎結構使用以下架構:
觸發測試後,VTS自動測試基礎結構將執行以下任務:
- 從不同位置獲取構建工件並測試資源:
- 合作夥伴Android版本(PAB) 。對於GSI,VTS框架和其他一些構建。
- 本地文件系統,Google雲存儲或其他特定於供應商的構建系統。對於不將內部版本存儲在Google的雲中的合作夥伴。
- 閃存將構件(來自設備)和GSI(來自AOSP)構建到所連接的設備上。
- 使用本地TradeFed或云中的TradeFed運行VTS測試。
- 將測試結果報告給VTS儀表板
該過程由VTS主機控制器(HC)進行協調,該主機是實驗室中的機器,用於指示所有被測設備的行為。 HC負責獲取最新版本,將其刷新到設備上,並調用測試(本地或通過指揮官)。它還與雲調度程序通信,並在調度程序和運行在HC上的TradeFed實例(或某些其他工具)之間引導流量。有關主機控制器的詳細信息,請參見主機控制器體系結構。
資源提供者
自動化測試需要係統構建,測試文件和VTS工件等資源。儘管可以從源代碼構建它們,但是更容易從樹梢定期構建它們,然後發布工件以進行下載。
合作夥伴可以使用以下位置訪問自動化資源:
- 合作夥伴Android Build 。按帳戶授予程序訪問權限。
- 本地文件系統(或類似文件)。對於不使用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憑據。憑據(訪問令牌和刷新令牌)存儲在本地,這意味著合作夥伴只需要登錄一次。
POST請求URL
單擊PAB中的資源鏈接將發送POST請求,其中包含該資源的必要數據,包括:
- 建立編號,建立目標
- 資源名稱
- 科
- 發布候選名稱,以及候選是否為內部版本
POST請求由buildsvc
RPC的downloadBuildArtifact
方法接收,該方法返回一個可用於訪問資源的URL。
- 對於Clockwork Companion APK資源,該URL是PAB上託管的可讀URL(受Auth保護,並可以使用適當的OAuth2憑據進行訪問)。
- 對於其他資源,該URL是來自內部Android Build API的長且不受保護的URL(五分鐘後失效)。
獲取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複製到本地目錄。
閃爍的版本
將最新的設備映像下載到主機後,必須將這些映像刷新到設備上。根據構建提供程序存儲的臨時文件路徑,使用標準adb
和fastboot
命令以及Python子fastboot
來完成此操作。
支持的動作:
- 僅閃爍GSI
- 從主系統中
fastboot flash boot boot.img
單個映像(例如,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儀表板項目。