为 CTF 进行测试

本指南介绍了如何添加移除 CTF 测试。

如何向 CTF 添加测试

在获取 CTF 之前,请阅读 CTF 测试要求 。最显著的要求是,测试必须使用 test RealmFactory,然后再按照本指南中的说明操作。

如果测试位于 //sdk/ctf/tests:tests 的组中,则该测试会包含在 CTF 中。 在将测试添加到此群组之前,必须重写其构建规则, CTF 版本。虽然这是一个必要的步骤,但遗憾的是,这一步即将被取消。

要向此群组添加测试,请在 BUILD.gn 中执行以下每个步骤 文件,其中包含测试的 fuchsia_test_component 目标。

1. 导入 CTF build 规则

import("//sdk/ctf/build/ctf.gni")

2. 使用 CTF GN 模板

将测试的 fuchsia_package 声明替换为 ctf_fuchsia_package

之前

fuchsia_package("fuchsia-example-tests") {
  testonly = true
  package_name = "fuchsia-example-tests"
  deps = [ ":fuchsia-example-test-component" ]
}

之后

ctf_fuchsia_package("fuchsia-example-tests") {
  testonly = true
  package_name = "fuchsia-example-tests"
  deps = [ ":fuchsia-example-test-component" ]
}

3. 将测试发布归档添加到 build 图

ctf_fuchsia_package 会生成一个 ${target_name}_archive 目标,该目标会生成 测试的 FAR 归档此归档文件是在 CTF 中发布的内容。将 group("tests") 目标指向 BUILD.gn 文件(如果该文件不存在),则将 归档为依赖项:

group("tests") {
  testonly = true
  deps = [
    ":fuchsia-example-tests_archive",
    ...
  ]
}

您已成功将 group("tests") 添加到 BUILD.gn 文件中。您现在处于 准备将该组添加到 //sdk/ctf/tests:tests

4. 添加 GN 模板以构建预构建的 CTF 测试

如需教 CTF 如何将测试的预构建软件包构建到可运行的目标中, 创建一个 GN 模板,该模板可生成与 fuchsia_test_package,用于运行最新版本的测试。例如: 如果测试根组件和测试软件包如下所示:

fuchsia_test_component("fuchsia-example-test-root") {
  testonly = true
  manifest = "meta/fuchsia-example-test-root.cml"
  test_type = "ctf"
}

fuchsia_test_package("fuchsia-example-tests-latest") {
  test_components = [ ":fuchsia-example-test-root" ]
  subpackages = [
    ":fuchsia-example-tests", # latest version of the test suite.
    ":fuchsia-example-test-realm-factory",
  ]
  deps = [ ":fuchsia-example-test-helper" ]
}

然后将此模板添加到 //sdk/ctf/build/generate_ctf_tests.gni

template("generate_fuchsia-example-tests") {
  forward_variables_from(invoker, [ "test_info" ])
  fuchsia_package_with_test(target_name) {
    test_component = "//path/to/test:fuchsia-example-test-root",
    test_component_name = "test-root.cm"
    subpackages = [
      test_info.target_label, # prebuilt version of the test suite.
      "//path/to/test:fuchsia-example-test-realm_factory"
    ]
    deps = [ "//path/to/test:fuchsia-example-test-helper" ]
  }
}
  • 为了让 CTF 将此模板与预构建的测试软件包匹配,此模板 必须命名为 generate_{package_name},且 package_name 必须匹配 测试的原始 ctf_fuchsia_package 名称。
  • 此模板将test_info.target_label(而非 :fuchsia-example-tests,因为前者指向 CIPD 提供的测试,后者指向 来源。

5. 测试更改

如需验证是否已正确完成这些步骤,请运行以下命令:

fx set core.x64 --with //sdk/ctf:ctf_artifacts
fx build

构建应显示错误提示,以运行更新 //sdk/ctf/goldens/package_archives.json.运行该命令,然后运行 fx build

在此阶段,如果 缺少上一步或步骤与测试的预构建版本不匹配 。如果一切顺利,则可使用以下命令运行测试 命令:

fx test fuchsia-example-test_ctf<N>

鉴于这是当前 build 中的预构建测试版本, 与先前 CTF 版本中的某个版本相比,N 是 Fuchsia 平台的 API 级别。

6. 提交更改

将更改送审。提交后,系统会自动 当下一个里程碑分支被剪切时,会包含在下一个 CTF 版本中。对于 如需进一步审核,请发送电子邮件至 fuchsia-ctf-team@google.com

如何从 CTF 中移除测试

如需从未来的 CTF 版本中移除测试,请执行以下操作:

  1. 从构建图中移除 testarchive
  2. 删除测试的 gn 模板
  3. 从测试的构建规则中移除 ctf 模板

将这些更改提交到主分支。所有 API 级别随时间的变化趋势 都将不再受支持,并且 测试将在 CQ 中停止运行。

如果您必须立即从 CQ 中移除某个测试及其所有预构建版本, 作为一个额外的步骤,您应该遵循 Fuchsia 的变更控制流程 择优挑选一个 CL,从每个 release 分支。例如,如果您想从 CTF 版本中移除测试 对于 API 级别 20,需要为您的 CL 择优挑选 releases/f20 分支。

测试要求

每项测试都必须符合这些要求,然后才能添加到 CTF 中。

CTF 测试必须使用测试领域工厂模式

test Realm 工厂模式允许版本对测试套件进行版本控制 组件(无需对被测组件进行版本编号)。请阅读 测试领域工厂指南,并在必要时重构测试,然后再遵循 本指南。

CTF 测试必须仅依赖于面向合作伙伴的 ABI

CTF 测试必须仅依赖于合作伙伴 SDK 类别中的软件, 因为测试会强制其依赖项保持稳定。这是 不会强制执行提交前检查。通常,测试作者只需验证 其测试套件组件使用的 FIDL 协议可在 partner SDK 类别。

CTF 测试必须使用 C、C++ 或 Rust 编写

在撰写本文时,CTF 仅支持以下语言。