使用全域設定載入通訊協定

為了瞭解本節內容,請先研究 Tradefed 的 @Option

Tradefed 中的一般選項可讓測試類別從 XML 設定檔或指令列接收其他資訊。這項功能可讓您額外執行一個步驟,並視需要解決部分額外資訊。

檔案選項範例

範例檔案 @option:

@Option(name = 'config-file')
private File mConfigFile;

您可以透過 XML 設定設定上述項目:

<option name="config-file" value="/tmp/file" />

或透過指令:

--config-file /tmp/file

說明

這項功能可讓您將遠端的 File 型 @Options 解析為本機檔案,以便從使用者角度無縫使用。

這個檔案必須利用遠端樣式路徑指定,才能有效執行。例如:

--config-file gs://bucket/tmp/file

這個路徑指向儲存 Google Cloud Storage (GCS) 值區中的檔案。Tradefed 在看到該遠端路徑時,會嘗試在本機下載檔案,並將檔案指派給 @Option。這會導致 mConfigFile 變數現在指向本機版本的檔案,可供測試使用。

如果遠端檔案因故無法下載,Tradefed 會擲回 ConfigurationException,讓測試無法執行。我們會將缺少這些檔案視為重大失敗,因為部分測試構件也會遺失。

使用查詢參數

您可以使用 ? 在網址中加入查詢參數。例如:gs://bucket/path?unzip=true。鍵/值 unzip=true 會在 IRemoteFileResolver 介面 實作中提供。

您可以使用下列兩種內建行為:

  • unzip:如果設為 true,且下載的檔案為壓縮檔,系統會自動將檔案解壓縮到臨時位置。範例:?unzip=true
  • 選用:預設為 false。如果設為 true 且解析度失敗,系統不會擲回例外狀況,只會不替換檔案。範例: ?optional=true

您也可以透過 --dynamic-download-args key=value 傳遞全域查詢引數,該引數會將鍵/值傳遞至在叫用中嘗試的所有動態下載項目。

支援的通訊協定

官方支援的通訊協定及其對應格式如下:

  • Google Cloud Storage,通訊協定:gs,格式:gs://<bucket name>/path
  • 本機檔案,通訊協定:file,格式:file:/local/path
  • http 連結、通訊協定:http,格式:http://url
  • https 連結、通訊協定:https、格式:https://url

限制

@Option 的動態解析度目前僅支援少數通訊協定和下載位置。@Option 的解析功能目前僅適用於主要的 XML Tradefed 設定。

如果以套件形式執行,目前的模組 (AndroidTest.xml) 預設不會解析檔案。這麼做是為了避免模組建立一些不明的依附元件。您可以在套件層級使用 --enable-module-dynamic-download 來逃逸,但主要套件 (例如 Compatibility Test Suite (CTS)Vendor Test Suite (VTS)) 不會啟用此功能。

實作新通訊協定

支援的通訊協定在 Tradefed 中實作 IRemoteFileResolver 介面,定義通訊協定的短標記,並透過 getSupportedProtocol 在檔案路徑中比對。例如,gs 是用於 Google Cloud Storage 通訊協定。建議實作的介面為 #resolveRemoteFiles(RemoteFileResolverArgs),這是長期維護的介面。

實作的通訊協定可新增至harness META-INF 服務檔案,正式啟用支援功能。