Rust の不安定なテスト
Tuist は Cargo テスト結果の不整合を検出し、テスト → 不安定なテスト で調査を支援します。
- Rust テストインサイト を設定してください。
不安定なテストの検出方法#
Tuist は同じコミットに対する CI 実行を比較します。ある実行では成功し、別の実行では失敗するテストは不安定としてマークできます。
各実行を通常のコマンドで報告します。
tuist cargo test --workspace
Cargo は失敗したテストを自動的に再試行しません。同じコミットで CI ジョブを再実行すると、クロスラン検出のための別の結果が得られます。
不安定なテストの管理#
自動クリア#
検出と回復はプロジェクトの「不安定なテスト検出」オートメーションを通じて実行されます。デフォルトでは、再トリガーがない場合、不安定フラグは 14 日後にクリアされます。設定 → オートメーション で回復ウィンドウとアクションを編集できます。
手動管理#
テスト → 不安定なテスト を開いてテストの履歴を確認します。詳細ページから手動で不安定としてマークしたり、マークを解除したりできます。
隔離とストレステスト#
詳細ページからテストをミュートまたはスキップするか、設定 → オートメーション で隔離を設定します。次の tuist cargo test でプロジェクトの現在の隔離状態を取得します。
- ミュートされたテストは引き続き実行され、実際の結果を報告しますが、その失敗によってコマンドが失敗することはありません。他のテストの失敗、コンパイルエラー、クラッシュ、不完全な結果は通常通り失敗します。
- スキップされたテストは実行から除外され、隔離されたスキップとして報告されます。マッチングにはパッケージ、ターゲット、Rust モジュールパス、およびテスト名が含まれるため、類似した名前のテストは独立しています。
ミュートは選択されたワークスペースのパッケージと機能を維持し、ミュートされたターゲットが失敗しても、選択されたすべてのターゲットを実行します。スキップ隔離には単一のパッケージ選択が必要です。マルチパッケージのワークスペースコマンドではなく、tuist cargo test -p store を使用してください。Tuist はマルチパッケージのスキップを拒否します。これは、コマンドを狭めることで Cargo の統合された依存関係の機能が変更される可能性があるためです。
隔離は シャーディングされた Cargo 実行 にも適用されます。Tuist が状態を取得できない場合、警告を発して隔離なしで実行します。失敗は抑制されません。意図的に隔離なしで実行するには:
TUIST_TEST_SKIP_QUARANTINE=1 tuist cargo test --workspace
適用には標準の libtest ハーネスとキャプチャされたデフォルト出力が必要です。quiet、verbose、alternate-format、またはキャプチャされていない出力を持つコマンドは、隔離を適用する必要がある場合に失敗します。ターゲットの帰属が曖昧な場合は、-p <package> で正確なワークスペースパッケージを選択してください。カスタムハーネス、パッケージ/ターゲット名のグロブ、および未解決のパッケージ選択はサポートされていません。ドックテストもミュートまたはスキップできますが、Rustdoc のテストフィルタリングはすべての可能な例の名前のペアを区別できません。例をスキップすることで有効な例もスキップされてしまう場合、または部分的なドックテストの除外が --exact を使用している場合、Tuist はスキップされた例を実行したり、有効なテストを黙って省略したりするのではなく、診断情報とともに失敗します。調査中は上記のオーバーライドを使用してください。
Tuist は新しい Cargo テストのストレステストを行いません。調査中に失敗するテストを繰り返すには、Cargo テストフィルタを使用します。
tuist cargo test -p store rejects_invalid_token
Slack 通知#
テストが不安定になったときにチームに通知するために、Slack 不安定なテストアラート を設定してください。