Fuchsia 的构建系统可导出有关
包含在 build 输出中 tests.json
文件的 build 中包含的测试
目录(例如 $FUCHSIA_DIR/out/default/tests.json
)。
Fuchsia 的持续集成基础架构使用 tests.json
来确定要运行哪些测试,使用 fx test
来确定
哪些测试可以在本地运行tests.json
及其架构
平台构建和测试的实现细节,
是 SDK 的一部分。
本文档介绍了该文件的内容以及该文件的生成方式。
生成 testing.json
tests.json
文件由“tests”api 模块
放在源代码树的根目录下
tests.json
条目的字段是使用 GN
元数据
机制。
tests.json
条目是使用
test_spec
GN 模板。
tests.json
由 fx set
自动生成。tests.json
格式受限于使用
GN 相对有限的元数据机制。要绕过这些
存在一些限制,因此 Fuchsia build 还会生成名为 test-list.json
的文件,
它是通过后处理 tests.json
生成的,如下所述。
Testing.json 使用方
由于 tests.json
文件
指定 Fuchsia 版本的可用测试的规范列表。
本部分将调查该广告格式中最值得关注的消费者。
test_list_tool
test_list_tool 会处理 tests.json
。
通过使用规范化测试列表,它会使用包含的软件包
以便加载 build 软件包,并为每个 build 软件包添加注解
使用有关如何执行代码以及
额外分类。例如,它可以确定
组件会封闭运行,并使用 "hermetic":
true
标记测试。
test_list_tool 会将此信息输出到 test-list.json
tests.json
旁的文件,它作为最后一个
构建步骤。它使用
name
键为 tests.json
,以便系统可以匹配条目。
fx search-tests
fx search-tests
脚本对测试名称提供模糊匹配
以帮助开发者找到可以运行哪些测试。它使用
将 tests.json
中的值作为用于模糊匹配的键,以及
以及通过源代码树搜索未包含的测试。
音效测试
fx test
命令是面向开发者的测试入口点
在 Fuchsia 源代码树中执行。它使用 tests.json
来
确定规范化测试集,然后找出相关
test-list.json
和test_components.json
中的数据,以确定
应如何执行测试。
植物学家 / 测试者
在基础架构中,testsharder 依赖于
tests.json
,用于根据环境维度对测试条目进行分片。
该过程的输出是另一个包含字段的文件
衍生自 tests.json
,然后将其传递给植物学家
。
Testing.json 结构
tests.json
是由单个数组组成的 JSON 文件。每个
元素对应于单个测试目标中的条目
和构建。
测试目标条目有两个顶级字段:environments
和
test
分别对应于测试环境和测试信息。
字段
环境字段
environments
字段是一组测试环境条目。
每个测试环境条目指定一个测试环境
并且此字段可供测试更难将测试分片
设备配置。
每个测试环境条目都有一个 dimensions
字段,其
任意数量的任意维度。不过,通常情况下
最常见的两组字段:
device_type
- 指定测试所需的设备类型。 例如:"environments": [ { "dimensions": { "device_type": "QEMU" } } ]
表示可以在 QEMU 设备配置上运行的测试。 注意:这并不意味着该测试会在任何 QEMU 上运行 而是要在 QEMU 实例上运行测试 基于
botanist
使用的配置。cpu
和os
- 指定所需的 CPU 架构以及 操作系统进行主机测试。例如:"environments": [ { "dimensions": { "cpu": "x64", "os": "Linux" } } ]
这会指定可在 x64 Linux 系统上运行的测试。
tags
- 指定其他分片属性。例如:"environments": [ { "tags": [ "e2e-isolated" ] } ]
这会指定带有“e2e-standalone”标记的测试。
带有环境标记的测试不会连续运行 除非 build 配置 选择使用该代码运行测试,在这种情况下,仅测试 才能投放
测试字段
test
字段提供有关如何分类、运行
然后配置测试测试 fx test
和 botanist
等执行器
根据此数据确定正确的二进制文件和命令行
执行测试。它还包含有用的信息
其他工具集成,例如用于重建测试目标
测试调用之间。
测试通常分为两类:主机和测试。主机测试 是指主机系统上要运行以执行的二进制文件路径 测试。设备测试是指在 测试管理器目标系统。
一些主机测试需要 Fuchsia 设备,有些则不需要。一个
端到端测试 (E2E) 的 os
不是“紫红色”,但仍
在其 environments
中指定了 device_type
。
test
对象包含以下字段(按测试类型划分):
所有测试
name
- 测试的名称。此值在tests.json
中是唯一的。 通常包含用于设备测试的测试组件网址和 测试二进制文件(相对于主机输出目录)的路径 测试。cpu
- 运行此测试的 CPU 架构。通过以下应用进行冗余备份: 主机测试的environments
条目,但这是 以便进行设备测试os
- 运行此测试的操作系统。使用environments
进行冗余 条目,但对于主机测试而言, 此信息的唯一来源是 设备测试。botanist
使用此字段来确定 应在宿主机上作为子进程运行 通过 SSH 连接到目标设备。label
- 生成此测试条目的 GN 标签。习惯 从fx test
执行测试时知道要重新构建哪些目标, 但仅适用于此标签会实际输出 真实的测试二进制文件其他类型的测试使用不同的标签字段 例如package_label
。
仅限主机测试
path
- 测试二进制文件的路径(相对于输出) 目录。仅适用于主机测试。runtime_deps
- (相对于输出目录)的路径 包含文件路径列表(相对于输出内容)的 JSON 文件 目录)的文件,这些文件应放置在主机已知的位置 以便在运行时使用该文件的格式为 JSON 数组 多个文件路径字符串。
仅限设备测试
has_generated_manifest
- 如果该组件的测试组件具有 清单由 GN 规则生成,如果测试是主机,则省略 否则为 false。用于测试分类和跟踪 使用自定义清单进行测试build_rule
- 由 build 生成,用于进一步测试分类。 例如,了解某个测试是由fuchsia_unittest_package
或fuchsia_test_package
规则。log_settings
- 可能包含以下字段的字典: <ph type="x-smartling-placeholder">- </ph>
max_severity
- 此字段会替换默认最大日志数 严重级别。默认情况下,发出 ERROR 日志的测试将 会失败,但此字段会指示测试执行程序在某一模式下运行 这种情况下,不同级别的日志会导致故障。min_severity
- 用于指示测试组件发出 (而非默认级别)的日志。默认情况下测试 选择自己的最低日志严重性
package_label
- 生成此软件包的 GN 标签 测试文件。仅适用于设备测试。供fx test
用于在包含测试的软件包运行前重新构建这些软件包。component_label
- 生成测试组件的 GN 标签 用于在没有匹配项时进行模糊匹配测试名称fx search-tests
(除了所有其他标签之外, 字段)。仅适用于设备测试。package_manifests
- 路径列表(相对于输出目录) 。 用于确定在构建测试后要重新发布哪些软件包 在fx test
中。仅适用于设备测试。package_url
- 与此测试对应的测试组件网址。 这是测试管理器为设备执行的网址 测试。parallel
- 替换默认测试运行程序并行处理(作为 整数)。通常用于指示测试执行程序告知ffx test
不要针对具有串扰的测试并行运行多个测试用例。 将此值设置为1
会停用并行测试用例执行。 数字> 1
则强制并行执行测试用例(如果支持) 由单个测试运行程序运行
示例
主机测试
[
{
"environments": [
{
// This test runs on the infra shard for Linux x64.
"dimensions": {
"cpu": "x64",
"os": "Linux"
}
}
],
"test": {
"cpu": "x64",
"label": "//src/performance/trace2json:trace2json_tests(//build/toolchain:host_x64)",
"name": "host_x64/trace2json_tests",
"os": "linux",
// This is the path to execute the test both locally and in infra.
"path": "host_x64/trace2json_tests",
// The deps listed in this file must be placed in a known
// location for the test.
"runtime_deps": "host_x64/gen/src/performance/trace2json/trace2json_tests.deps.json"
}
}
]
设备测试
[
{
"environments": [
// This test runs on the AEMU shard in infra.
{
"dimensions": {
"device_type": "AEMU"
}
}
],
"test": {
// This test was created using fuchsia_unittest_package
"build_rule": "fuchsia_unittest_package",
"component_label": "//src/diagnostics/lib/sampler-config:sampler-config-tests_component(//build/toolchain/fuchsia:x64)",
"cpu": "x64",
// This test specified its own manifest.
"has_generated_manifest": false,
"label": "//src/diagnostics/lib/sampler-config:sampler-config-tests_test_sampler-config-tests_component(//build/toolchain/fuchsia:x64)",
"log_settings": {
// Any ERROR or FATAL logs will force this test to fail.
"max_severity": "WARN"
},
"name": "fuchsia-pkg://fuchsia.com/sampler-config-tests#meta/sampler-config-tests.cm",
"os": "fuchsia",
"package_label": "//src/diagnostics/lib/sampler-config:sampler-config-tests(//build/toolchain/fuchsia:x64)",
// These manifests can be used for deep inspection of the
// contents of this test.
"package_manifests": [
"obj/src/diagnostics/lib/sampler-config/sampler-config-tests/package_manifest.json"
],
"package_url": "fuchsia-pkg://fuchsia.com/sampler-config-tests#meta/sampler-config-tests.cm"
}
}
]