這份使用手冊提供相容性測試的完整總覽
對 Fuchsia (CTF) 而言,這是一項可凍結分支版本構件的機制
並在 main
分支版本中載入這些模組進行測試。
CTF 最常見的用途是在發布分支版本上凍結測試,以及
然後針對 CI/CQ 中 main
分支版本的元件執行這項測試。這個
避免回溯不相容的變更,會導致預先建構的用戶端中斷。
如要進一步瞭解 CTF 的整體情況,請參閱總覽和動機。 文件。
基本用法
本節說明如何使用 CTF 以及常見情境。
驚喜包廂套票
如要凍結名為 my-package 的 Fuchsia 套件,請按照下列步驟操作:
- 將套件從
fuchsia_package
變更為ctf_fuchsia_package
。 - 將
{PACKAGE_NAME}_archive
目標納入 //sdk/ctf/tests:tests.
範例:
# Old src/my-package/BUILD.gn
import("//build/components/fuchsia_package.gni")
fuchsia_package("my-package") {
# ...
}
將檔案變更為以下程式碼:
# New src/my-package/BUILD.gn
import("//sdk/ctf/build/ctf.gni")
ctf_fuchsia_package("my-package") {
# ...
}
然後更新 //sdk/ctf/tests/BUILD.gn
:
group("tests") {
deps = [
# ...
"//src/my-package:my-package_archive",
]
}
您也可以在本機 BUILD.gn
中建立 group("ctf_tests")
,
並在 //sdk/ctf/tests/BUILD.gn
中參照該 ID。
系統會編譯您的套件,並將套件儲存在
ctf-artifacts
當 Fuchsia 里程碑推出時。完成這個步驟後
必須附上載入檔案包的操作說明 (請參閱下一節)。
正在載入 Fuchsia 套件
如要載入凍結的 Fuchsia 套件,請先進行更新
generate_ctf_tests.gni
敬上
,附上載入檔案包的操作說明。
您需要在 generate_ctf_tests.gni
中定義新範本
檔案名稱為 generate_my-package
,且這個範本必須展開為 Fuchsia 測試套件。
範本會收到名為 test_info
的參數
包含下載套件的標籤 test_info.target_label
。
例如:
template("generate_my-package") {
forward_variables_from(invoker, [ "test_info" ])
fuchsia_package_with_test(target_name) {
test_component = "//src/my-package:my-package-test-root",
test_component_name = "test-root.cm"
subpackages = [
test_info.target_label, # prebuilt version of the test suite.
# other packages needed to implement the test, such as a RealmFactory.
]
}
}
凍結主機測試
如要凍結主機測試,請按照下列步驟操作:
- 將建構規則從
host_test
變更為ctf_host_test
。 - 將該目標納入 //sdk/ctf/tests:tests.
範例:
# Old src/my-host-test/BUILD.gn
import("//build/testing/host_test.gni")
host_test("my-host-test") {
# ...
}
將檔案變更為以下程式碼:
# New src/my-host-test/BUILD.gn
import("//sdk/ctf/build/ctf.gni")
ctf_host_test("my-host-test") {
# ...
}
然後更新 //sdk/ctf/tests/BUILD.gn
:
group("tests") {
deps = [
# ...
"//src/my-host-test:my-host-test",
]
}
您也可以在本機 BUILD.gn
中建立 group("ctf_tests")
,
並在 //sdk/ctf/tests/BUILD.gn
中參照該 ID。
這會導致主機測試及其依附元件
在下一個 Fuchsia 里程碑發布時,ctf-artifacts
。
完成這個步驟後,您的測試將會自動以 CTF 語言執行
使用您傳遞給 ctf_host_test
的任何引數。
基本概念
CTF 包含兩種機制:
凍結和載入程序會在 fuchsia.git
的尖端執行
本機測試的存放區,透過 //sdk/ctf
建構目標。包含
在 fx set
引數中,--with-test //sdk/ctf
會產生以下結果:
建構輸出內容:
$FUCHSIA_DIR/out/default/cts/host_test_manifest.json
$FUCHSIA_DIR/out/default/cts/package_archives.json
$FUCHSIA_DIR/out/default/cts/*.far # Packages referenced in manifest
$FUCHSIA_DIR/out/default/cts/host_x64/* # Host tests referenced in manifest
這可同時帶來原始測試和新版測試 包含在建構中的容器:
$ fx test --dry
...
fuchsia-pkg://fuchsia.com/fuchsia-diagnostics-tests-latest#meta/fuchsia-diagnostics-tests-root.cm
fuchsia-pkg://fuchsia.com/fuchsia-driver-test_tests-package#meta/test-root.cm
...
fuchsia-pkg://fuchsia.com/fuchsia-diagnostics-tests_ctf_in_development#meta/fuchsia-diagnostics-tests-root.cm
fuchsia-pkg://fuchsia.com/fuchsia-driver-test_tests_ctf_in_development#meta/test-root.cm
generate_ctf_tests.gni
中定義的規則如下:
負責移除 package_archives.json
中提及的套件
變更成正常的 Fuchsia 測試套件。因為這些
套件從 CTF 組件竊取的;
都具有 ctf_in_development
後置字串這些測試都能
使用 fx test
執行。
每個 Fuchsia 里程碑 (例如 F16 和 F17) 的發布版本為
已與 Git 中的發布分支版本相關聯 (例如
refs/heads/releases/F16
。系統會透過
進而產生新的 ctf
,當中包含資訊清單中參照的套件和主機測試。
不過,在版本分支版本上,系統會壓縮產生的目錄
上傳至 CIPD,做為預先建構的記錄檔
jiri run-hooks
。您可以在
在 prebuilt/ctf/f*
結帳,找到一次價格:fuchsia.git
每個 Fuchsia 里程碑發布的目錄。可靠資料來源
哪些里程碑預先建構的套件
version_history.json
,列出 supported
要測試的 API 級別。
//sdk/ctf/release:tests
中定義的建構目標會疊代
並套用
generate_ctf_tests.gni
適用的規則
下載套件的方式
和開發中套件一樣
他們被盜獵了。您可以在 fx set
引數中使用 --with-test
//sdk/ctf/release:tests
即可加入這些參數。
這項操作會在建構作業中新增每個支援等級的新測試:
$ fx test --dry
...
fuchsia-pkg://fuchsia.com/fuchsia-diagnostics-tests_ctf18#meta/fuchsia-diagnostics-tests-root.cm
fuchsia-pkg://fuchsia.com/fuchsia-driver-test_tests_ctf18#meta/test-root.cm
...
fuchsia-pkg://fuchsia.com/fuchsia-diagnostics-tests_ctf19#meta/fuchsia-diagnostics-tests-root.cm
fuchsia-pkg://fuchsia.com/fuchsia-driver-test_tests_ctf19#meta/test-root.cm
每項已建立測試的測試都有一個字尾,可指出發布分支版本,位置是
凍結的套件 (例如 ctf18、F18 和 F19 的 ctf19)
)。所有這些測試都可以使用 fx test
執行。
疑難排解失敗情形
CTF 測試會在不相容時失敗
於冷卻套件之間
fuchsia.git
,這會導致 core.x64-debug-ctf
建構工具
無法順利提交變更詳情請參閱
如需詳細操作說明,請參閱疑難排解指南
以及如何解決 CL 提交的失敗問題。