通过全局配置加载协议

为了理解本部分内容,我们先研究一下 Tradefed @Option

Tradefed 中的典型选项允许测试类从 XML 配置或命令行接收附加信息。此功能允许您再往前迈一步,那就是在必要时解析其中某些附加信息。

文件选项示例

文件 @option 示例:

@Option(name = 'config-file')
private File mConfigFile;

上例可以通过 XML 配置来设置:

<option name="config-file" value="/tmp/file" />

也可以通过以下命令来设置:

--config-file /tmp/file

说明

借助此功能,您可以从用户的角度将远程的文件类型 @Option 解析为可无缝使用的本地文件。

为实现此目的,需要使用远程样式路径指定文件。 例如:

--config-file gs://bucket/tmp/file

此路径指向存储于 Google Cloud Storage (GCS) 存储分区中的文件。Tradefed 看到该远程路径后,会尝试在本地下载该文件并将其分配给 @Option。这会导致 mConfigFile 变量现在指向文件的本地版本,该版本可供测试使用。

如果出于任何原因无法下载相应远程文件,Tradefed 将抛出 ConfigurationException,从而阻止测试运行。我们认为缺失这些文件是严重的故障,因为某些测试工件也会缺失。

使用查询参数

可以使用 ? 向网址添加查询参数。例如 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 的动态解析目前仅支持有限数量的协议和下载位置。目前仅针对主要 XML Tradefed 配置启用了 @Option 的解析。

如果作为套件运行,默认情况下,当前模块 (AndroidTest.xml) 将不会解析这些文件。这是为了防止模块创建一些未知的依赖项。 可以通过在套件级使用 --enable-module-dynamic-download 来规避此限制,但是诸如兼容性测试套件 (CTS)供应商测试套件 (VTS) 等主要套件将无法启用此功能。

实现新协议

受支持的协议在 Tradefed 中有 IRemoteFileResolver 接口的实现,该实现定义了将在文件路径中通过 getSupportedProtocol 匹配的协议的短标记。例如,gs 用于 Google Cloud Storage 协议。 建议实现的接口是 #resolveRemoteFiles(RemoteFileResolverArgs),该接口将需要长期保持。

可以将实现的协议添加到自动化测试框架 META-INF 服务文件中,以正式启用支持。