為了瞭解本節內容,請先研究 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 服務檔案,正式啟用支援功能。