為了理解本節,首先研究 Tradefed @Option 。
Tradefed 中的典型選項可讓測試類別從 XML 配置或命令列接收附加資訊。此功能可讓您採取額外的步驟並在必要時解決其中一些附加資訊。
文件選項範例
範例檔案@選項:
@Option(name = 'config-file')
private File mConfigFile;
以上可以透過XML配置進行設定:
<option name="config-file" value="/tmp/file" />
或透過命令:
--config-file /tmp/file
描述
此功能可讓您將遠端文件類型的 @Options 解析為本機文件,以便從使用者的角度無縫可用。
為此,需要使用遠端樣式路徑指定該檔案。例如:
--config-file gs://bucket/tmp/file
此路徑指向儲存該檔案的 Google Cloud Storage (GCS) 儲存桶中的檔案。 Tradefed 在看到該遠端路徑後,將嘗試在本機下載該檔案並將其指派給 @Option。這導致mConfigFile
變數現在指向檔案的本機版本,可供測試使用。
如果因任何原因無法下載遠端文件,Tradefed 將拋出ConfigurationException
,從而阻止測試運行。我們認為遺失這些檔案是一個嚴重的失敗,因為一些測試工件也會遺失。
使用查詢參數
可以使用?
將查詢參數加入到 URL 中。 。例如, gs://bucket/path?unzip=true
。鍵/值unzip=true
將在IRemoteFileResolver 介面實作中可用。
有兩種內建行為可用:
- unzip:如果設定為
true
且下載的檔案是 zip,它將自動解壓縮到暫存位置。範例:?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 的動態解析目前僅支援有限數量的協定和下載位置。目前僅針對主要 XML Tradefed 配置啟用 @Option 解析。
如果作為套件運行,當前模組 ( AndroidTest.xml
) 預設不會解析檔案。這是為了防止模組創建一些未知的依賴關係。可以透過在套件層級使用--enable-module-dynamic-download
來避免這種情況,但相容性測試套件 (CTS)和供應商測試套件 (VTS)等主要套件不會啟用它。
實施新協議
支援的協定在 Tradefed 中有一個IRemoteFileResolver 介面的實現,該介面定義了將透過getSupportedProtocol
在檔案路徑中匹配的協定的短標記。例如, gs
用於 Google 雲端儲存協定。建議實作的介面是#resolveRemoteFiles(RemoteFileResolverArgs)
,這將是長期維護的介面。
實現的協定可以新增到harness META-INF服務文件中以正式開啟支援。