通過全局配置加載協議

為了理解本節,首先研究 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 服務文件中以正式開啟支持。