通过全局配置加载协议

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