Fuchsia 的建構系統會匯出所有
在建構輸出內容的 tests.json
檔案中,建構包含的測試
目錄中 (例如 $FUCHSIA_DIR/out/default/tests.json
)。
Fuchsia 的持續整合基礎架構採用 tests.json
決定要執行的測試,fx test
則用它來確定
就能在本機執行測試tests.json
及其結構定義如下
平台建構和測試的實作細節,而非
的一部分
本文件說明檔案內容,以及檔案產生方式。
產生 test.json 結果
tests.json
檔案是由「tests」產生的API 模組
位於原始碼樹狀結構的根目錄
系統會使用 GN 收集 tests.json
項目的欄位
中繼資料
機制
tests.json
個項目是使用
test_spec
GN 範本。
「tests.json
」是由「fx set
」自動產生。tests.json
格式受到 GN 使用
GN 的中繼資料機制相對有限。在這之前
Fuchsia 版本也會產生名為 test-list.json
的檔案,
這項資訊是由後續處理 tests.json
所產生,如下所示。
test.json 使用者
許多工具和指令碼會擷取 tests.json
檔案,因為該檔案
指定 Fuchsia 版本的可用測試標準清單。
本節會調查此廣告格式中最重要的消費者。
test_list_tool
test_list_tool 會處理 tests.json
。
系統會使用測試的標準清單,使用內含的套件
載入建構套件並加上註解的資訊清單
為您測試了執行方式,以及
其他分類。舉例來說,此功能可以判斷
元件執行模式,並使用 "hermetic":
true
標記測試。
test_list_tool 會將這項資訊輸出至 test-list.json
位在 tests.json
旁邊,且是最後一種執行
建構步驟也使用相同的
將 name
鍵當做 tests.json
使用,以便比對項目。
外匯搜尋測試
fx search-tests
指令碼可針對測試名稱提供模糊比對功能
,協助開發人員找出可供執行的測試。使用
tests.json
中的值做為模糊比對的鍵
,透過來源樹狀結構搜尋非包含的測試。
FX 測試
fx test
指令是開發人員要測試的進入點
就會在 Fuchsia 來源樹狀結構中執行。此函式會使用 tests.json
執行下列操作:
判斷一組標準測試,然後找出
「test-list.json
」和「test_components.json
」中的資料
如何執行測試
植物學家 / 檢測員
在基礎架構中,testsharder 依附於
tests.json
:根據環境維度分割測試項目。
這項程序會輸出另一個含有欄位的檔案
衍生自 tests.json
,接著會傳遞給 botanist
執行測試
test.json 結構
tests.json
是由單一陣列組成的 JSON 檔案。每項
陣列元素對應至
建構過程
測試目標項目有兩個頂層欄位:environments
和
分別對應至測試環境和測試資訊的 test
。
欄位
環境欄位
environments
欄位是測試環境項目的陣列。
每個「測試環境」項目會指定一個測試環境
可能會在
裝置設定
每個測試環境項目都有一個 dimensions
欄位,其中包含
任意數量的任意維度不過,一般而言
最常見的欄位組合:
device_type
:指定測試的必要裝置類型。 例如:"environments": [ { "dimensions": { "device_type": "QEMU" } } ]
這表示測試可在 QEMU 裝置設定中執行。 注意:這不代表測試會在「任何」 QEMU 上執行 而是在 QEMU 執行個體上執行 視
botanist
使用的設定而定cpu
和os
- 指定所需的 CPU 架構與 進行主機測試的作業系統例如:"environments": [ { "dimensions": { "cpu": "x64", "os": "Linux" } } ]
這會指定可在 x64 Linux 系統上執行的測試。
tags
- 指定資料分割的其他屬性。例如:"environments": [ { "tags": [ "e2e-isolated" ] } ]
這會指定含有「e2e-隔離」標記的測試。
如果測試含有環境標記,就無法持續執行 除非特別建構設定 選擇使用該代碼執行測試,在此情況下只有測試 該代碼就能執行
測試欄位
test
欄位提供分類、執行、
並設定測試。測試執行器,例如 fx test
和 botanist
使用這項資料來決定正確的二進位和命令列
執行測試這個介面也包含
其他工具整合 (例如重新建構測試目標)
測試叫用之間的間隔
測試一般分為兩種類型:主機和裝置。主機測試 指的是在要執行的主機系統上 進行測試。裝置測試是指在 目標系統
有些主機測試需要使用 Fuchsia 裝置,有些則不需要。一個
端對端測試 (E2E) 的 os
不是「fuchsia」但保持
的 environments
中指定了 device_type
。
test
物件包含下列欄位,並會按照測試類型分割:
所有測試
name
- 測試的名稱。這個值在tests.json
中是獨一無二的。 通常包含裝置測試和 相對於主機輸出目錄的測試二進位檔路徑 測試。cpu
:執行這項測試的 CPU 架構。有備援機制 用於主機測試的environments
項目,但是 以便用於裝置測試os
:執行這項測試的作業系統。與environments
有重複項目 執行主機測試的項目,但這些資訊是 裝置測試botanist
會使用這個欄位來判斷 測試應該以子程序的形式執行,或是在主機上執行 透過 SSH 連線至目標裝置。label
- 產生這個測試項目的 GN 標籤。用於 透過fx test
執行測試時,知道要重新建構哪些目標。 但僅適用於此標籤實際輸出此標籤的主機測試 用於實際工作環境的測試二進位資料其他類型的測試使用不同的標籤欄位 例如package_label
。
僅限主機測試
path
:測試二進位檔的路徑相對於輸出 目錄。僅針對主機測試顯示。runtime_deps
- 到輸出目錄的路徑 (相對於輸出目錄) 包含檔案路徑清單 (相對於輸出) 的 JSON 檔案 目錄),因此應該放在主機已知位置 進行測試檔案格式為 JSON 陣列 檔案路徑字串
僅限裝置測試
has_generated_manifest
- 如果這是測試元件,則為 True 資訊清單是由 GN 規則所產生,如果測試是主機,系統會省略。 測試,否則傳回 false。用於測試分類和追蹤 自訂資訊清單build_rule
:由版本產生,用於進一步測試分類。 舉例來說,判斷測試是否由fuchsia_unittest_package
或fuchsia_test_package
規則。log_settings
- 可能包含這些欄位的字典:max_severity
:這個欄位會覆寫預設記錄檔上限 以便做出測試根據預設,如果測試發出 ERROR 記錄, 失敗,但這個欄位會指示測試執行工具在模式中執行 因記錄層級不同而導致失敗的情況。min_severity
:用於指示測試元件發出 而非預設的記錄檔預設測試 選擇自己的最低記錄嚴重性
package_label
:產生套件的 GN 標籤 僅適用於裝置測試。fx test
會使用此物件在執行前重新建構內含測試的套件。component_label
:產生測試元件的 GN 標籤 這項測試。不相符時用於模糊比對的測試名稱 除了所有其他標籤之外,在fx search-tests
中找到了測試 欄位)。僅適用於裝置測試。package_manifests
- 路徑清單 (相對於輸出目錄) 針對每個與建構測試套件相關的套件資訊清單。 建構測試後可決定要重新發布的套件 在「fx test
」中。僅適用於裝置測試。package_url
:與這項測試相對應的測試元件網址。 這是測試管理員為裝置執行的網址 測試。parallel
- 覆寫預設測試執行元件平行處理原則 (做為 整數)。通常用於指示測試執行器,指示ffx test
不要在包含交叉交談的測試中平行執行測試案例。 如果將這個值設為1
,系統就會停用平行測試案例執行作業。 數字> 1
則會強制平行測試案例執行 (如果支援的話) 每個測試執行元件即可
範例
主機測試
[
{
"environments": [
{
// This test runs on the infra shard for Linux x64.
"dimensions": {
"cpu": "x64",
"os": "Linux"
}
}
],
"test": {
"cpu": "x64",
"label": "//src/performance/trace2json:trace2json_tests(//build/toolchain:host_x64)",
"name": "host_x64/trace2json_tests",
"os": "linux",
// This is the path to execute the test both locally and in infra.
"path": "host_x64/trace2json_tests",
// The deps listed in this file must be placed in a known
// location for the test.
"runtime_deps": "host_x64/gen/src/performance/trace2json/trace2json_tests.deps.json"
}
}
]
裝置測試
[
{
"environments": [
// This test runs on the AEMU shard in infra.
{
"dimensions": {
"device_type": "AEMU"
}
}
],
"test": {
// This test was created using fuchsia_unittest_package
"build_rule": "fuchsia_unittest_package",
"component_label": "//src/diagnostics/lib/sampler-config:sampler-config-tests_component(//build/toolchain/fuchsia:x64)",
"cpu": "x64",
// This test specified its own manifest.
"has_generated_manifest": false,
"label": "//src/diagnostics/lib/sampler-config:sampler-config-tests_test_sampler-config-tests_component(//build/toolchain/fuchsia:x64)",
"log_settings": {
// Any ERROR or FATAL logs will force this test to fail.
"max_severity": "WARN"
},
"name": "fuchsia-pkg://fuchsia.com/sampler-config-tests#meta/sampler-config-tests.cm",
"os": "fuchsia",
"package_label": "//src/diagnostics/lib/sampler-config:sampler-config-tests(//build/toolchain/fuchsia:x64)",
// These manifests can be used for deep inspection of the
// contents of this test.
"package_manifests": [
"obj/src/diagnostics/lib/sampler-config/sampler-config-tests/package_manifest.json"
],
"package_url": "fuchsia-pkg://fuchsia.com/sampler-config-tests#meta/sampler-config-tests.cm"
}
}
]