如何將測試新增至 CTF
開始之前,請參閱 CTF 測試規定。最值得注意的要求是,測試必須先使用測試領域工廠,才能遵守本指南。
如果測試位於 //sdk/ctf/tests:tests 的群組,系統就會納入 CTF 中的測試。在將測試新增至這個群組之前,必須先重新編寫建構規則才能使用 CTF 版本。請放心,我們很快就會失去這項必要步驟。
如要在這個群組中新增測試,請在包含測試 fuchsia_test_component
目標的 BUILD.gn 檔案中執行以下步驟。
1. 匯入 CTF 建構規則
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. 將測試版本封存新增至建構圖表
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 範本的預先建構版本不符,建構作業就會輸出錯誤。如果一切成功,就可以使用這個指令執行測試:
fx test fuchsia-example-test_ctf<N>
由於這是目前版本預先建構測試的版本,而非先前 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 測試必須使用測試領域工廠模式
測試領域工廠模式可讓建構在 CTF 中為測試套件元件建立版本,而不必對測試中的元件進行版本管理。請先詳閱測試領域工廠指南,並視需要重構測試,再按照本指南操作。
CTF 測試只能依附合作夥伴提供的 ABI
CTF 測試在執行階段只能依附於合作夥伴 SDK 類別中的軟體,因為測試會強制其依附元件保持穩定。這不會透過預先提交檢查強制執行。一般來說,測試作者只需要驗證其測試套件元件使用的 FIDL 通訊協定全都可用於 partner
SDK 類別。
CTF 測試必須以 C、C++ 或 Rust 編寫
本文撰寫 CTF 時僅支援這些語言。