本指南详细介绍了在 模拟 Fuchsia 图像。
前提条件
在 Fuchsia 上运行 Rust 测试套件之前,您需要 为 Fuchsia 构建自定义 Rust 工具链。构建 Fuchsia 图像不是 运行该测试套件所需的全部代码
运行 Rust 测试套件
(可选)设置自定义临时目录:
export TEST_TOOLCHAIN_TMP_DIR=TEMP_DIR
如果临时目录未设置,则命名为
tmp~
, 在rust_toolchain.py
旁边创建。如果您使用自定义临时目录, 您需要在每个 shell 中将TEST_TOOLCHAIN_TMP_DIR
设置为相同的路径 用于与同一测试环境进行交互您可以在不同的 shell 中将
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-build $DEV_ROOT/rust/build/fuchsia-rust \ --sdk $DEV_ROOT/sdk \ --target x86_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
调查测试失败情况
运行该测试套件会生成许多日志和其他工件
调查失败的测试套件测试。这些可以转储为标准输出
如果使用 --verbose
标志启动fuchsia-test-runner.py stop
测试环境
路径 | 说明 |
---|---|
emulator_log |
来自正在运行的模拟器的日志。其中通常包含有关测试崩溃或无法启动的原因的详细信息。 |
ffx_daemon_log |
来自正在运行的 ffx 守护程序的日志。 |
package_server_log |
来自正在运行的 pm 服务器的日志。 |
test_env.json |
测试环境的配置设置。这对于查找特定详细信息(例如正在使用的 libstd 和 libtest 或模拟器的地址)非常有用。 |
vdl_output |
发布的设备 proto。 |
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=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 输出它在此过程中运行的确切命令。您可以
通过运行输出的 compiletest
调用来快速重新运行单个测试
。