加载带有全局配置的协议

为了理解本部分,请先学习 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=trueunzip=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 文件中,以正式启用支持。