對 CTF 做出測試

本指南將說明如何新增移除 CTF 測試。

如何將測試新增至 CTF

開始前,請先詳閱 CTF 測試規定 已開始。最重要的是,測試必須採用 測試領域,再使用本指南。

如果測試包含在 //sdk/ctf/tests:tests 中的群組中,系統會將測試納入 CTF。 將測試新增至這個群組前,必須重新撰寫測試的建構規則才能使用 CTF 版本。然而,雖然這個步驟很快就會淘汰,但這是必要的步驟。

如要在這個群組中新增測試,請在 BUILD.gn 中執行下列步驟 檔案,其中包含測試的 fuchsia_test_component 目標。

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

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

在這個階段,如果 GN 範本中定義的 GN 範本 缺少先前的步驟,或是該步驟與預先建構的測試版本不符 就可以開始自訂了如果一切成功,您就能使用以下指令執行測試 指令:

fx test fuchsia-example-test_ctf<N>

由於這是目前版本的預建測試版本,而非 與先前 CTF 版本的某些版本相比,N 是 Fuchsia 平台的 目前仍處於開發階段的 API 級別

6. 提交變更

將變更送審。提交測試後,系統就會自動 。適用對象 如需額外審查,請來信至 fuchsia-ctf-team@google.com

如何從 CTF 移除測試

如要從日後的 CTF 版本移除測試,請按照下列步驟操作:

  1. 從建構圖表中移除測試封存檔
  2. 刪除測試的 gn 範本
  3. 從測試的建構規則中移除 ctf 範本

將這些變更提交至主要分支版本。所有 API 級別的長期資料 將停止支援對應的最新版 測試就會停止在 CQ 中執行

如果您需要立即從 CQ 移除測試及所有預先建構版本, 您還應遵循 Fuchsia 的變更控製程序 決定 CLerry 從每個相應的 發行分支版本舉例來說,假設您要從 CTF 版本移除測試 如果是 API 級別 20,就必須在 releases/f20 中挑選 CL

測試規定

每項測試都必須符合以下規定,才能被添加至 CTF。

CTF 測試必須使用測試領域工廠模式

「測試領域工廠」模式允許建構版本測試套件的版本 並未依照測試中的元件建立版本。請閱讀 測試領域工廠指南,並視需要重構測試,接著再繼續進行 本指南。

CTF 測試只能仰賴面向合作夥伴的 ABI

CTF 測試僅能使用合作夥伴 SDK 類別中所述的軟體: 因為測試會強制其依附元件保持穩定。這是 不會強制執行預先提交的檢查測試作者通常只需要確認 如需測試套件元件使用的 FIDL 通訊協定,請參閱 partner SDK 類別。

CTF 測試必須以 C、C++ 或 Rust 編寫

在撰寫 CTF 之前,只有這些語言支援這些語言。