為了理解本節,首先研究 Tradefed @Option 。
Tradefed 中的典型選項允許測試類從 XML 配置或命令行接收附加信息。此功能允許您多走一步,並在必要時解決其中的一些附加信息。
文件選項示例
示例文件@option:
@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
傳遞全局查詢參數,它將鍵/值傳遞給調用中嘗試的所有動態下載。
支持的協議
官方支持的協議及其對應格式有:
- 谷歌云存儲,協議:
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
進行轉義,但兼容性測試套件 (CTS)和供應商測試套件 (VTS)等主要套件不會啟用它。
實施新協議
支持的協議在 Tradefed 中實現了IRemoteFileResolver 接口,該接口定義了將通過getSupportedProtocol
在文件路徑中匹配的協議的短標記。例如, gs
用於 Google Cloud Storage 協議。建議實現的接口是#resolveRemoteFiles(RemoteFileResolverArgs)
,它將是長期維護的接口。
實現的協議可以添加到harness META-INF 服務文件中以正式開啟支持。