测试环境

构建系统与持续集成 用于发现、聚合 并运行测试总体而言,测试作者会指定 希望其测试在 GN 中运行,并且这些信息是从 build 传播的 基础架构

更具体地说,

  • build 会为每个测试生成元数据文件,指定所需的 执行环境
  • 基础架构会将测试分组为共享同一环境的分片。
  • 对于每个分片,基础架构会安排一个聊天机器人来运行这些测试。
  • 系统会汇总并报告所有分片的结果。

环境

测试中 GN 中的 environments 规范决定了在何处 以及测试是如何运行的它以范围列表的形式提供,其形式如下:

environments = [
  {
    dimensions = {
       <dimension key> = <value>
       ...
    }
    tags = ["<environment tags...>"]
    netboot = <boolean>
  },
  ...
]

请参阅 guest_integration_tests 有关“维度”的定义,请参阅下文和“tags”

默认行为

如果没有为测试指定环境,则默认行为 如下:

  1. __is_fuchsia__:测试仅在运行 Fuchsia 的 QEMU 实例中运行
  2. __is_linux__:测试仅在 Linux 机器上运行
  3. __is_mac__:测试仅在 Mac 计算机上运行

(1) 表示硬件是选择启用的;测试作者必须明确指定 以便在其中运行测试。之所以会出现这种情况,原因在于 测试需要在硬件上运行,测试作者最清楚情况是否如此, 硬件是一项稀缺资源

预定义的环境

一个可能会导入 //build/testing/environments.gni 并使用其中定义的与环境相关的便捷变量。对于 例如,basic_envs 包含可用于 而无需与基础架构团队进行特殊咨询。

尺寸

此处的 dimensions 是指 Swarm 其中 Swarming 是基础架构使用的任务分配系统。答 维度实际上是一个键值对,用于描述 。

标签

标记是可以附加到环境的任意字符串。设置 相当于从正常测试流水线中移除相应的测试; 为运行该测试,基础架构支持新构建器(运行 测试)。标签用于特殊测试 需要不同配置的在使用代码之前,请先咨询 fuchsia-infra-team@google.com&quot;

Netboot

Netboot 指定在运行测试前是否使用 netboot 而不是 paving 在此环境对应的分片中如果省略,将被视为 false。

验证

test_plaforms 列表 //build/testing/platforms.gni 哪些平台可用于测试,哪些平台 进行比对假设环境与以下参数匹配: 平台条目(如果前者的 dimensions 是后者的子范围);说一个 如果环境与当前架构匹配,则环境对当前架构有效 test_platforms 条目,未指定除以下项以外的 cpu 值: current_cpu

环境验证发生 gn gen 次,可总结为

  • 每种环境都必须对某些架构有效。

  • 每个测试都必须有一个对指定架构有效的环境。

示例

假设 platform.gni 包含

test_platforms = [
  {  # P1
    device_type = "QEMU"
    cpu = "x64"
  },
  { # P2
    device_type = "QEMU"
    cpu = "arm64"
  },
  { # P3
    device_type = "Intel NUC Kit NUC7i5DNHE"
    cpu = "x64"
  },
]

并考虑

environments = [
  { # E1
     dimensions = {
       device_type = "Intel NUC Kit NUC7i5DNHE"
     }
  },
  { # E2
     dimensions = {
       device_type = "QEMU"
     }
  },
]

current_cpu 为 x64 时,E1 和 E2 均有效,并且与 P1 和 P3 匹配 分别是:测试计划在 NUC 和 QEMU 中运行。时间 current_cpu 为 arm64,E1 无效,但会被忽略,因为 E2 有效且匹配 P2:测试安排仅在 QEMU 中运行。