Fuchsia tests.json 文件格式

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.jsonfx 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.jsontest_components.json中的数据,以确定 应如何执行测试。

植物学家 / 测试者

在基础架构中,testsharder 依赖于 tests.json,用于根据环境维度对测试条目进行分片。 该过程的输出是另一个包含字段的文件 衍生自 tests.json,然后将其传递给植物学家

Testing.json 结构

tests.json 是由单个数组组成的 JSON 文件。每个 元素对应于单个测试目标中的条目 和构建。

测试目标条目有两个顶级字段:environmentstest 分别对应于测试环境和测试信息。

字段

环境字段

environments 字段是一组测试环境条目。 每个测试环境条目指定一个测试环境 并且此字段可供测试更难将测试分片 设备配置。

每个测试环境条目都有一个 dimensions 字段,其 任意数量的任意维度。不过,通常情况下 最常见的两组字段:

  • device_type - 指定测试所需的设备类型。 例如:

    "environments": [
        {
            "dimensions": {
                "device_type": "QEMU"
            }
        }
    ]
    

    表示可以在 QEMU 设备配置上运行的测试。 注意:这并不意味着该测试会在任何 QEMU 上运行 而是要在 QEMU 实例上运行测试 基于 botanist 使用的配置。

  • cpuos - 指定所需的 CPU 架构以及 操作系统进行主机测试。例如:

    "environments": [
        {
            "dimensions": {
                "cpu": "x64",
                "os": "Linux"
            }
        }
    ]
    

    这会指定可在 x64 Linux 系统上运行的测试。

  • tags - 指定其他分片属性。例如:

    "environments": [
      {
        "tags": [ "e2e-isolated" ]
      }
    ]
    

    这会指定带有“e2e-standalone”标记的测试。

    带有环境标记的测试不会连续运行 除非 build 配置 选择使用该代码运行测试,在这种情况下,测试 才能投放

测试字段

test字段提供有关如何分类、运行 然后配置测试测试 fx testbotanist 等执行器 根据此数据确定正确的二进制文件和命令行 执行测试。它还包含有用的信息 其他工具集成,例如用于重建测试目标 测试调用之间。

测试通常分为两类:主机和测试。主机测试 是指主机系统上要运行以执行的二进制文件路径 测试。设备测试是指在 测试管理器目标系统。

一些主机测试需要 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_packagefuchsia_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"
    }
  }
]