本指南詳細說明在模擬的 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設為不同值,同時管理多個測試環境。確認
lld可存取zlibDEV_ROOT=DEV_ROOT export LIBRARY_PATH=$LIBRARY_PATH:$DEV_ROOT/install/zlib/lib啟動測試環境:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=$DEV_ROOT/rust/src/ci/docker/scripts/fuchsia-test-runner.pypython3 $TEST_TOOLCHAIN start \ --rust-build $DEV_ROOT/rust/build/fuchsia-rust \ --sdk $DEV_ROOT/cipd/sdk \ --target x86_64|aarch64-unknown-fuchsia \ --toolchain-dir $DEV_ROOT/rust執行 Rust 測試套件:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=$DEV_ROOT/rust/src/ci/docker/scripts/fuchsia-test-runner.py( \ source $DEV_ROOT/fuchsia-env.sh && \ $DEV_ROOT/rust/x.py \ --config $DEV_ROOT/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/cipd/sdk/arch/x64|a64/sysroot/lib \ --test-args --target-rustcflags \ --test-args -L \ --test-args --target-rustcflags \ --test-args $DEV_ROOT/cipd/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=$DEV_ROOT/rust/src/ci/docker/scripts/fuchsia-test-runner.pypython3 $TEST_TOOLCHAIN stop
調查測試失敗原因
執行測試套件會產生許多記錄和其他構件,有助於調查測試套件測試失敗的原因。如果使用 --verbose 旗標啟動測試環境,這些項目可在 fuchsia-test-runner.py stop 期間傾印至標準輸出。
| 路徑 | 說明 |
|---|---|
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 金鑰。這些憑證可用於透過 ssh -i ssh/fuchsia_ed25519 EMULATOR_ADDRESS 登入模擬器。模擬器地址位於 test_env.json。 |
偵錯測試失敗
- 請閱讀測試的標準輸出和錯誤。這項資訊位於測試的
output目錄中,且會由 compiletest 額外回報。 - 檢查詳細的模擬器記錄。您可以在
emulator_log中搜尋與output目錄名稱相符的測試名稱,即可找到這些檔案。 使用
zxdb偵錯測試。執行下列指令,即可輕鬆附加至測試:DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=$DEV_ROOT/rust/src/ci/docker/scripts/fuchsia-test-runner.pypython3 $TEST_TOOLCHAIN debug \ --rust-src $DEV_ROOT/rust \ --test TEST_PATH接著設定所有相關中斷點,並使用下列指令執行測試:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=$DEV_ROOT/rust/src/ci/docker/scripts/fuchsia-test-runner.py( \ source $DEV_ROOT/fuchsia-env.sh && \ $DEV_ROOT/rust/x.py \ --config $DEV_ROOT/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/cipd/sdk/arch/x64|a64/sysroot/lib \ --test-args --target-rustcflags \ --test-args -L \ --test-args --target-rustcflags \ --test-args $DEV_ROOT/cipd/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標記。
訣竅
如要縮短疊代迴圈,您可以執行 x.py test 並使用 -vv 引數,讓 compiletest 列印過程中執行的確切指令。如要快速重新執行單一測試,請執行測試執行前列印的 compiletest 呼叫。