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 mycrate | 1 パッケージ |
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 ci | CI チューン設定を使用 |
| JUnit 出力 | CI レポート用に nextest.toml で設定 |
制限事項
| サポートされていない | なぜ |
|---|
| ドクテスト | cargo test --doc 別実行 |
#[bench] | 代わりに criterion を使用 |
| 一部 libtest フラグ | 異なるランナーセマンティクス |
一般的な CI パターンは cargo nextest run && cargo test --doc。
nextest 対 cargo test
| 側面 | cargo nextest | cargo test |
|---|
| プロセスモデル | テスト 1 つあたり | バイナリ 1 つあたり |
| 分離 | 強力 | バイナリ内で共有 |
| 速度 | 2–3x 高速 (通常) | ベースライン |
| フレーキー検出 | 組み込み | なし |
| CI シャーディング | 組み込み | 手動 |
| ドクテスト | いいえ | はい |
リソース