为了理解本节,首先研究 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 服务文件中以正式开启支持。