執行 Fuchsia 測試

本指南說明如何使用 fx test 指令執行 Fuchsia 測試。

在 Fuchsia 中,測試可以是在 Fuchsia 裝置上執行的元件 (請參閱以元件進行測試),或在主機機器上執行的獨立執行檔。

如要執行 Fuchsia 測試,請使用 fx test 指令和測試名稱:

fx test <TEST_NAME>

如果 TEST_NAME 是測試元件,fx test 會連線至您的 Fuchsia 裝置以載入並執行測試元件。也就是說,指令會找出元件的對應的元件 URI,並呼叫 ffx test run。不過,如果 TEST_NAME 是主機測試,fx test 會直接叫用該測試二進位檔,以在主體機器上執行。

與主機測試類似,端對端測試也可在主體機器上執行。接著,測試可能會在 Fuchsia 裝置上與不同服務互動以進行測試 (請參閱Fuchsia 的指令碼層)。如要執行端對端測試,請為 fx test 提供額外標記 (--e2e):

fx test --e2e <END_TO_END_TEST_NAME>

自訂叫用

fx test 可以一次執行多個測試或測試套件。這個指令也可以篩選出裝置、主機或端對端測試這些測試。

如要自訂 fx test,您可以新增標記並提供多項測試:

fx test <FLAGS> <TEST_NAME_01> <TEST_NAME_02> ...

以下各節列出自訂 fx test 的常見方式。

執行多項測試

如果您要執行多組 Fuchsia 測試,請將 Fuchsia 版本設為包含數個主要測試組合、建構 Fuchsia,然後在建構作業中執行所有測試。例如:

fx set core.x64 --with //bundles/tools,//bundles/tests
fx build
fx test

您也可以在單一叫用中提供多個目標:

fx test <PACKAGE_01> <PACKAGE_02> <COMPONENT_01> <COMPONENT_02>

如要瞭解指定測試的各種方式,請參閱「以多種方式指定測試」。

將引數傳遞至測試

使用 -- 旗標傳遞其他引數以測試元件。

下列範例會將 arg 標記傳遞至測試:

$ fx test <TEST_NAME> -- --arg=5

例如,上述指令會在內部呼叫以下指令:

$ fx ffx test run <TEST_COMPONENT_URI> -- --arg=5

以多種方式指定測試

fx test 支援多種參照特定測試的方式:

主機測試路徑

如果是主機測試,請提供來自 Fuchsia 建構輸出目錄根目錄的測試二進位檔相對路徑。如果路徑指向子目錄而非檔案,fx test 就會執行該目錄中所有相符的測試二進位檔。

舉例來說,您可以提供指定測試二進位檔的相對路徑:

fx test host_x64/pm_cmd_pm_genkey_test

您也可以提供測試目錄的相對路徑:

fx test host_x64/gen/sdk

套件網址

請提供完整的 Fuchsia 元件網址以指定測試元件。例如:

fx test fuchsia-pkg://fuchsia.com/my_example_test_pkg#meta/my_example_test.cm

請提供部分套件網址,以比對並執行套件中的所有測試元件,並提供提供的 Fuchsia 套件網址。例如:

fx test fuchsia-pkg://fuchsia.com/my_example_test_pkg

套件名稱

提供套件名稱以執行該套件中的所有測試元件。例如:

fx test my_example_test_pkg

如要將輸入內容明確指定為套件名稱,請使用旗標 -p。例如:

fx test -p my_example_test_pkg

元件名稱

請提供元件名稱 (或「資源路徑」),以測試套件中的單一元件。例如:

fx test my_example_test

如要將輸入內容明確指定為元件名稱,請使用旗標 -c。例如:

fx test -c my_example_test

如要在特定套件中執行元件,請同時使用 -p <PACKAGE_NAME>-c <COMPONENT_NAME>。例如:

fx test -p my_example_test_pkg -c my_example_test

設定最低記錄檔嚴重性

fx test (和基礎 ffx test) 接受「--min-severity-logs」標記,可讓您設定測試和測試元件產生的記錄檔最低嚴重性。

如果測試或其基礎元件使用了支援設定動態記錄嚴重性的記錄程式庫 (Fuchsia Rust 和 C++ 記錄程式庫支援這項設定),對於不支援此項功能的測試元件,test_manager 會在測試產生的嚴重性低於您設定的最小值時,手動篩選記錄。

這個標記接受兩種定義最低嚴重性的方法:

  • <severity>FATALERRORWARNINFODEBUGTRACE 其中之一。這適用於測試本身和測試中的所有元件產生的記錄。

  • <component selector>#<severity>,其中 <component selector> 會指定測試的一組元件 (例如 foo/bar),而嚴重性是前述的可接受嚴重性之一。

以下列舉幾個例子:

  • --min-severity-logs DEBUG:測試和所有測試中的元件,會指示發出嚴重性為 DEBUG 以上的記錄。這相當於使用元件選取器:--min-severity-logs **#DEBUG

  • --min-severity-logs a#DEBUG --min-severity-logs b/c#ERROR:測試 a 的元件會發出嚴重性為 DEBUG 以上的記錄,而測試 b/c 的元件會發送嚴重性為 ERROR 以上的記錄。測試本身產生的記錄會使用預設的最低嚴重性。

  • --min-severity-logs '<root>#DEBUG':指示測試會發出嚴重性為 DEBUG 以上的記錄,但下層的元件會根據預設最低嚴重性發出記錄。

  • --min-severity-logs foo/*/bar#ERRORfoo 子項底下名為 bar 的所有元件,任何名稱都會發出嚴重性為 ERROR 以上的記錄。舉例來說,foo/a/barfoo/baz/bar 會受到影響,但測試元件 foo/bara/b 則不會。

從 run-host-tests 轉換

fx run-host-testsfx run-e2e-tests 指令已淘汰,並改用 fx test。請參閱下列操作說明,瞭解如何使用 fx test 取代這些指令:

FX 測試


### run-host-tests {:#run-host-tests transformation="converted"}

Substitute `fx run-host-tests` with `fx test`.

From:

```posix-terminal
fx run-host-tests <PATH_TO_HOST_TEST>

到:

fx test <PATH_TO_HOST_TEST>

Run-e2e-tests

fx run-e2e-tests 替換成 fx test 和額外的 --e2e 旗標。

從:

fx run-e2e-tests <END_TO_END_TEST>

到:

fx test --e2e <END_TO_END_TEST>

測試驅動開發

fx smoke-test 指令會自動偵測建構系統已知受結帳變更所影響的所有測試。在此情況下,建議您嘗試下列疑難排解做法:

fx -i smoke-test --verbose

在上述指令中,--verbose 也會列印 fx smoke-test 認為受到變更影響的測試。每當您儲存變更時,-i 會自動重複這個指令。如要進行測試驅動開發,請嘗試在獨立的殼層中啟動這個指令,並在使用程式碼時查看程式碼的重建和重新測試作業。

fx smoke-test 搭配密封測試套件使用效果最佳。如果測試套件包含套件中任何測試的所有依附元件,則測試套件是一組理論。也就是說,任何會影響此測試結果的程式碼變更,都必須重新建構該測試的套件。

檢查測試元件中的成果

元件測試可能會產生無法向 stdout 顯示的其他構件,例如自訂構件和涵蓋範圍設定檔。根據預設,fx test 會以無訊息的方式捨棄這些構件。如要查看這些成果,請使用 --ffx-output-directory 將輸出目錄指定至 fx test。系統會從測試中提取成果,並儲存至指定的目錄。