构建系统与持续集成 用于发现、聚合 并运行测试总体而言,测试作者会指定 希望其测试在 GN 中运行,并且这些信息是从 build 传播的 基础架构
更具体地说,
- build 会为每个测试生成元数据文件,指定所需的 执行环境
- 基础架构会将测试分组为共享同一环境的分片。
- 对于每个分片,基础架构会安排一个聊天机器人来运行这些测试。
- 系统会汇总并报告所有分片的结果。
环境
测试中 GN 中的 environments
规范决定了在何处
以及测试是如何运行的它以范围列表的形式提供,其形式如下:
environments = [
{
dimensions = {
<dimension key> = <value>
...
}
tags = ["<environment tags...>"]
netboot = <boolean>
},
...
]
请参阅 guest_integration_tests 有关“维度”的定义,请参阅下文和“tags”
默认行为
如果没有为测试指定环境,则默认行为 如下:
__is_fuchsia__
:测试仅在运行 Fuchsia 的 QEMU 实例中运行__is_linux__
:测试仅在 Linux 机器上运行__is_mac__
:测试仅在 Mac 计算机上运行
(1) 表示硬件是选择启用的;测试作者必须明确指定 以便在其中运行测试。之所以会出现这种情况,原因在于 测试需要在硬件上运行,测试作者最清楚情况是否如此, 硬件是一项稀缺资源
预定义的环境
一个可能会导入
//build/testing/environments.gni
并使用其中定义的与环境相关的便捷变量。对于
例如,basic_envs
包含可用于
而无需与基础架构团队进行特殊咨询。
尺寸
此处的 dimensions
是指
Swarm
其中 Swarming 是基础架构使用的任务分配系统。答
维度实际上是一个键值对,用于描述
。
标签
标记是可以附加到环境的任意字符串。设置 相当于从正常测试流水线中移除相应的测试; 为运行该测试,基础架构支持新构建器(运行 测试)。标签用于特殊测试 需要不同配置的在使用代码之前,请先咨询 fuchsia-infra-team@google.com"
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 中运行。