为了理解本部分,请先学习 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
- optional:默认为
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
来避免,但主要的套件(如 兼容性测试套件 (CTS) 和 供应商测试套件 (VTS))不会启用它。
实现新协议
支持的协议在 Tradefed 中实现了 IRemoteFileResolver 接口,该接口定义了协议的短标签,该标签将通过 getSupportedProtocol
在文件路径中匹配。例如,gs
用于 Google Cloud Storage 协议。推荐实现的接口是 #resolveRemoteFiles(RemoteFileResolverArgs)
,这将是长期维护的接口。
实现的协议可以添加到 harness META-INF services 文件中,以正式启用支持。