如何向 CTF 添加测试
在开始之前,请先阅读 CTF 测试要求。最值得注意的要求是,测试必须使用测试领域工厂,然后才能遵循本指南。
如果某项测试位于 //sdk/ctf/tests:tests 处,该测试也会包含在 CTF 中。 在将测试添加到该组之前,必须重写其构建规则,以使用 CTF 版本。很遗憾,但这个步骤是必要的,我们很快就会取消。
如需向该组添加测试,请在包含测试的 fuchsia_test_component
目标的 BUILD.gn 文件中执行以下各个步骤。
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
- 为了使 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
。
在此阶段,如果上一步中定义的 GN 模板缺失,或者测试的预构建版本与 GN 模板不匹配,build 就会输出错误。如果一切顺利,可以使用以下命令运行测试:
fx test fuchsia-example-test_ctf<N>
由于这是当前 build 中的预构建测试版本,而不是上一个 CTF 版本中的某个版本,因此 N
是 Fuchsia 平台当前正在开发的 API 级别。
6. 提交更改
将更改送审。提交后,测试将自动包含在下一个 CTF 版本中,当下一个里程碑分支被确定时。如需进一步审核,请发送电子邮件至 fuchsia-ctf-team@google.com。
如何从 CTF 中移除测试
如需从未来 CTF 版本中移除测试,请执行以下操作:
将这些更改提交到主分支。随着时间的推移,与每个版本对应的所有 API 级别都将不再受支持,并且最后一个版本的测试将在 CQ 中停止运行。
如果您必须立即从 CQ 中移除某项测试及其所有预构建版本,则还应执行 Fuchsia 的变更控制流程,并择优挑选从每个相应的版本分支中移除该测试的 CL。例如,如果您要从 API 级别 20 的 CTF 版本中移除某项测试,则需要在 releases/f20
分支上择优挑选 CL。
测试要求
每项测试都必须满足这些要求,然后才能添加至 CTF。
CTF 测试必须使用测试领域工厂模式
测试领域工厂模式允许 build 在 CTF 中对测试套件组件进行版本控制,而不对被测组件进行版本控制。在按照本指南操作之前,请先阅读测试领域出厂指南并根据需要重构测试。
CTF 测试必须仅依赖于面向合作伙伴的 ABI
CTF 测试在运行时必须仅依赖于合作伙伴 SDK 类别中的软件,因为该测试会强制其依赖项保持稳定。这并非通过提交前检查来强制执行。通常,测试作者只需验证其测试套件组件使用的 FIDL 协议是否均在 partner
SDK 类别中提供。
CTF 测试必须使用 C、C++ 或 Rust 编写
在撰写本文时,CTF 仅支持这些语言。