Bazel テストインサイト
- Bazel プロジェクトを始める で説明されているように、
tuist bazel setupを介して接続された Bazel ワークスペース。
tuist bazel setup は .bazelrc.tuist 内でケースごとのレポートを設定するため、通常の bazel test は他のすべてのビルドシステムで使用されている同じダッシュボードに個々のテストケースを報告します。
bazel test //app:tests
検疫 も適用するには、代わりに Tuist ラッパー経由でテストを実行してください。-- の後の引数は bazel test に転送されます。
tuist bazel test -- //app:tests
追跡対象#
Tuist は test.xml レポートを解析し、Bazel が各テストターゲットに対して生成する test.log 出力をキャプチャして、共有のテスト実行モデルに集約します。各実行では以下を記録します。
- 個々のテストケースの合格、不合格、スキップされたステータスと、その所要時間。
- テストターゲット、クラス、およびスイートの構造。
- Bazel が不安定なテストを再試行するように構成されている場合の再試行回数。
- ターゲットの
test.logからキャプチャされた失敗時の出力。
テスト実行、テストケース、および個別のテストページはすべて、Bazel でも他のビルドシステムと同様に機能します。
ケースごとの JUnit レポートの出力#
ケースごとの行は、テストターゲットが Bazel が提供する $XML_OUTPUT_FILE パスに JUnit test.xml を書き込むことに依存します。ランナーがこれを書き込まない場合、Bazel はターゲット名に基づいた合成された単一ケースのレポートにフォールバックし、Tuist はターゲットごとに単一の行(テストケースリストで Bazel ターゲット とラベル付け)を表示します。生の test.log は実行ページで引き続き利用可能です。
ほとんどの Bazel テストルールはすでに実際の test.xml を生成します。
java_testおよびkt_jvm_test: JUnit が組み込まれています。- GoogleTest を使用した
cc_test: ランナーは最新の gtest に対してコンパイルされると JUnit を書き込みます。古いセットアップでは--gtest_output=xml:$XML_OUTPUT_FILEが必要です。 py_test:--junitxml=$XML_OUTPUT_FILEを使用して pytest を実行するか、rules_pythonpytest ランナーを使用します。go_test:go test -jsonをgotestsum --junitfile=$XML_OUTPUT_FILEにパイプ処理するか、JUnit を出力するヘルパーでラップします。
rules_rust および rules_rs の rust_test は標準の libtest ハーネスを実行しますが、これは安定版の Rust では JUnit を書き込みません。テストターゲットを、libtest 出力を解析して $XML_OUTPUT_FILE に JUnit を書き込むスクリプトでラップします。これにより、Tuist でケースごとの行を維持しつつ、同じ実行は単一の Bazel テストターゲットのままになります。
テストの識別#
ケースはターゲットラベル、クラス名(スイート名にフォールバック)、およびテスト名によって識別されます。これにより、異なるクラス内の同名のメソッドが区別されます。異なる包含スイート名を使用した古いレポートは、古い識別子の下で履歴を保持します。古い識別子に適用された状態変更は新しい識別子にも再適用する必要があり、コマンドは失敗が古い識別子と一致する場合に警告を発し、どのポリシーを移行すべきかを示します。
CI コンテキストの提供#
Tuist は Bazel のビルドメタデータから git コミットおよびブランチ情報を読み取るため、同じコミットでの実行を環境間で比較できます。ほとんどの継続的インテグレーションシステムはこれらを既に設定しています。あなたのシステムが設定していない場合は、明示的に渡してください。
tuist bazel test -- \
--build_metadata=CI=true \
--build_metadata=GIT_COMMIT="$GIT_COMMIT" \
--build_metadata=GIT_BRANCH="$GIT_BRANCH" //app:tests
同じ --build_metadata フラグは、Bazel ビルドインサイト ページで呼び出しにタグを付けるために説明されているものなので、単一のフラグセットで両方の表面をカバーします。
不安定なテストと検疫#
再試行、実行横断的な不安定性の検出、およびケースごとの検疫(ミュートとスキップ)はすべて tuist bazel test を介して機能します。完全なワークフローについては Bazel の不安定なテスト を参照してください。
データ保持#
Tuist は、テスト実行を生成した Bazel 呼び出し、そのログ、および保留中のテスト取り込みレコードを 90 日間保持します。テストケースとその実行履歴は他のすべてのビルドシステムと同じモデルを使用しており、その期間の対象外です。完全なポリシーについては データ保持 を参照してください。