本指南詳細說明在模擬 Fuchsia 映像檔上執行 Rust 編譯器測試套件的程序。
必要條件
您必須為 Fuchsia 建構自訂 Rust 工具鍊,才能在 Fuchsia 上執行 Rust 測試套件。執行測試套件時並不需要建構 Fuchsia 映像檔。
執行 Rust 測試套件
(選用) 設定自訂臨時目錄:
export TEST_TOOLCHAIN_TMP_DIR=TEMP_DIR
如未設定暫存目錄,系統會將目錄命名為
tmp~
,並會在rust_toolchain.py
旁邊建立。如果您使用自訂的臨時目錄,則需要將TEST_TOOLCHAIN_TMP_DIR
設為每個殼層中用來與相同測試環境互動的相同路徑。您可以將
TEST_TOOLCHAIN_TMP_DIR
設為不同殼層中的不同值,藉此同時管理多個測試環境。啟動測試環境:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=RUST_SRC/src/ci/docker/scripts/fuchsia-test-runner.py
python3 $TEST_TOOLCHAIN start \ --rust $DEV_ROOT/rust/install/fuchsia-rust \ --sdk $DEV_ROOT/sdk \ --target x64_64|arm64-unknown-fuchsia
執行 rust 測試套件:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=RUST_SRC/src/ci/docker/scripts/fuchsia-test-runner.py
( \ source $DEV_ROOT/rust/fuchsia-env.sh && \ $DEV_ROOT/rust/x.py \ --config $DEV_ROOT/rust/fuchsia-config.toml \ --stage=2 \ test TEST_SUITE \ --target x86_64|aarch64-unknown-fuchsia \ --run=always \ --jobs 1 \ --test-args --target-rustcflags \ --test-args -L \ --test-args --target-rustcflags \ --test-args $DEV_ROOT/sdk/arch/x64|a64/sysroot/lib \ --test-args --target-rustcflags \ --test-args -L \ --test-args --target-rustcflags \ --test-args $DEV_ROOT/sdk/arch/x64|a64/lib \ --test-args --target-rustcflags \ --test-args -Cpanic=abort \ --test-args --target-rustcflags \ --test-args -Zpanic_abort_tests \ --test-args --remote-test-client \ --test-args $TEST_TOOLCHAIN \ )
測試結果會列印為標準輸出內容。
停止測試環境:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=RUST_SRCsrc/ci/docker/scripts/fuchsia-test-runner.py
python3 $TEST_TOOLCHAIN stop
調查測試失敗
執行測試套件會產生許多記錄檔和其他構件,以便協助調查失敗的測試套件測試。如果在 fuchsia-test-runner.py stop
期間使用 --verbose
旗標啟動測試環境,這些類別可傾印到標準輸出內容。
路徑 | 說明 |
---|---|
emulator_log |
執行模擬器中的記錄。通常包含測試當機或無法啟動的詳細資訊。 |
ffx_daemon_log |
執行中的 ffx Daemon 中的記錄。 |
package_server_log |
執行中 pm 伺服器的記錄。 |
test_env.json |
測試環境的配置設定。這有助於找出特定詳細資料,例如使用的 libstd 和 libtest ,或是模擬器的位址。 |
vdl_output |
啟動的裝置原型。 |
ffx_isolate |
ffx 的隔離環境。您可以在此處找到 ffx 配置設定。 |
output |
每個測試套件測試的 ffx test 原始輸出內容。每個測試目錄都包含接收測試執行作業的所有 ffx 詳細資料。在 emulator_log 中找出特定測試的相關區段。 |
packages |
每項測試的套件階段。 |
rust-testing |
存放區服務目錄。 |
ssh |
測試執行元件用來存取執行中模擬器的安全殼層金鑰。這些參數可用來使用 ssh -i ssh/fuchsia_ed25519 EMULATOR_ADDRESS 登入模擬器。模擬器位址可在 test_env.json 內。 |
排除測試失敗情況
- 讀取測試中的標準輸出內容和錯誤。您可以前往測試的
output
目錄找到這項資訊,此外,編譯測試也會回報相關資訊。 - 檢查詳細的模擬器記錄。只要搜尋與
output
目錄名稱相符的測試名稱,即可在emulator_log
中找到這些結果。 使用
zxdb
對測試進行偵錯。您可以執行以下指令輕鬆附加至測試:DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=RUST_SRC/src/ci/docker/scripts/fuchsia-test-runner.py
python3 $TEST_TOOLCHAIN debug \ --rust-src RUST_SRC \ --test TEST_PATH
接著,請設定任何相關的中斷點,並透過以下方式執行測試:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=RUST_SRC/src/ci/docker/scripts/fuchsia-test-runner.py
( \ source $DEV_ROOT/rust/fuchsia-env.sh && \ $DEV_ROOT/rust/x.py \ --config $DEV_ROOT/rust/fuchsia-config.toml \ --stage=2 \ test TEST_SUITE \ --target x86_64|aarch64-fuchsia \ --run=always \ --jobs 1 \ --test-args --target-rustcflags \ --test-args -L \ --test-args --target-rustcflags \ --test-args $DEV_ROOT/sdk/arch/x64|a64/sysroot/lib \ --test-args --target-rustcflags \ --test-args -L \ --test-args --target-rustcflags \ --test-args $DEV_ROOT/sdk/arch/x64|a64/lib \ --test-args --target-rustcflags \ --test-args -Cpanic=abort \ --test-args --target-rustcflags \ --test-args -Zpanic_abort_tests \ --test-args --remote-test-client \ --test-args $TEST_TOOLCHAIN \ --rustc-args -Cdebuginfo=2 \ --rustc-args -Copt-level=0 \ --rustc-args -Cstrip=none \ )
此外,
zxdb
會在您設定的任何中斷點偵測到任何當機與中斷情形。 這個指令與上述指令相同,但會加上額外的-C debuginfo=2 -C opt-level=0
標記進行偵錯。
訣竅
如要加強疊代迴圈,您可以搭配 -vv
引數執行 x.py test
,讓編譯測試列印過程中執行的確切指令。只要在測試執行前立即執行列印 compiletest
叫用,就能快速重新執行單一測試。