コンテンツにスキップ

cargo-nextest - 次世代 Rust テストランナー チートシート

cargo-nextest - 次世代 Rust テストランナー チートシート

cargo-nextest は Rust 用の次世代テストランナーです。cargo test からの基本的なアーキテクチャの違いは各テストを独自のプロセスで実行することです。これは真の分離を提供します (あるテストが別のグローバル状態を破壊できません)、より優れた並列性、プロセスをクラッシュするテストを報告する能力を与えます。実際には通常2–3x 高速で大規模スイートでは、より清潔な出力、フレーキーテスト検出、CI シャーディング用パーティショニング。

インストール

方法コマンド
プリビルト (最速)cargo install cargo-nextest --locked
バイナリnextest リリースからダウンロード
macOS (Homebrew)brew install cargo-nextest
確認cargo nextest --version

基本的な使用

コマンド説明
cargo nextest runすべてのテスト実行
cargo nextest run -p mycrate1 パッケージ
cargo nextest run test_name部分文字列でフィルター
cargo nextest list実行せずリストアップ
cargo nextest run --releaseリリースプロファイル
cargo nextest run --no-fail-fast障害後も継続

フィルタリング (Filtersets)

nextest には テスト選択用の式言語があります。

選択
-E 'test(auth)'名前が auth にマッチするテスト
-E 'package(mycrate)'パッケージ内のすべてのテスト
-E 'kind(lib)'lib (ユニット) テストのみ
-E 'binary(integration)'特定のテストバイナリ
-E 'test(a) + test(b)'ユニオン
-E 'package(x) - test(slow)'差分
# 1 つのクレート用の統合テスト実行、遅いテスト除外
cargo nextest run -E 'package(api) and kind(test) - test(slow)'

フレーキーテスト検出

# 最大 3 回失敗再試行; 再試行後に合格するテストはFLAKY マーク
cargo nextest run --retries 3
構成効果
--retries N失敗したテストを N 回再試行
FLAKY として報告再試行後のみ合格
テスト別上書き構成でテスト別に設定

この区別は重要です: フレーキーテストは失敗テストとは異なる問題で、nextest はそれを明示的に表面化させ、リランの後ろに隠さない。

構成

# .config/nextest.toml
[profile.default]
retries = 0
fail-fast = false
slow-timeout = { period = "30s", terminate-after = 2 }

[profile.ci]
retries = 2
failure-output = "immediate-final"
status-level = "skip"

[[profile.default.overrides]]
filter = 'test(integration)'
threads-required = 2
設定目的
retriesデフォルト再試行数
slow-timeoutテスト期間内にフラグ/終了
threads-required重いテスト用キャパシティを予約
failure-output障害詳細を出力するタイミング
プロファイルcargo nextest run -P ci

CI シャーディング

# スイートを 4 つの CI マシンに分割
cargo nextest run --partition count:1/4   # ランナー 1 上
cargo nextest run --partition count:2/4   # ランナー 2 上
モード分割基準
count:N/Mテスト数でラウンドロビン
hash:N/M安定ハッシュ (同じテスト → 同じシャード)

出力とレポーティング

オプション効果
--status-level allすべてのテストステータスを表示
--failure-output immediate障害が発生したら出力
--message-format libtest-jsonマシン可読出力
--profile ciCI チューン設定を使用
JUnit 出力CI レポート用に nextest.toml で設定

制限事項

サポートされていないなぜ
ドクテストcargo test --doc 別実行
#[bench]代わりに criterion を使用
一部 libtest フラグ異なるランナーセマンティクス

一般的な CI パターンは cargo nextest run && cargo test --doc

nextest 対 cargo test

側面cargo nextestcargo test
プロセスモデルテスト 1 つあたりバイナリ 1 つあたり
分離強力バイナリ内で共有
速度2–3x 高速 (通常)ベースライン
フレーキー検出組み込みなし
CI シャーディング組み込み手動
ドクテストいいえはい

リソース