JUnitレポートとは?
JUnitレポートは、テスト結果 - どのテストが実行され、どれが通過し、どれが失敗し、どれだけ時間がかかったか - を記述する標準XMLファイルです。
名前に反して、JUnit XML形式はJavaをはるかに超えて使われています。これは、さまざまな言語のtest runnerが出力し、CIプラットフォームが結果表示のためにparseする事実上の標準となり、ツールがフレームワークごとにparserを必要としないようにしています。
含まれる内容
JUnit XMLは、test suiteとtest caseを、そのステータス(通過、失敗、スキップ)、所要時間、失敗メッセージやスタックトレースとともに列挙します。ほとんどのフレームワークは、直接またはreporterプラグイン経由でそれを出力できます。
CIが好む理由
形式が標準であるため、CIプラットフォームはpytest、Jest、Go、PHPUnitなど何十ものものからの結果を同じ方法で取り込めます - テストごとのステータスをレンダリングし、失敗を浮かび上がらせ、実行をまたいでflakyなテストを追跡します。
小さな例
pytest --junitxml=results.xml を実行すると、<testsuite> と <testcase> 要素を持つファイルが生成されます。CIのtest-reporterのstepがそれを読み取り、生の出力をスクロールする代わりに、失敗した各caseをそのメッセージとともにレンダリングします。
生成方法
runnerがJUnit XMLを出力するよう設定し、それをuploadするか、CIのtest-reportingのstepにそれを指し示します。プラットフォームはそれを読みやすい結果ビューにparseし、多くの場合pull requestで失敗した行にアノテーションを付けます。
形式の限界
JUnit XMLには単一の正式なschemaがないため、ツール間で方言がわずかに異なります。ほとんどの消費側は寛容ですが、風変わりなフィールドは無視されることがあります - 移植性のため、共通の要素(suite、case、failure、duration)に留めてください。
重要なポイント
- JUnit XMLはテスト結果のための言語横断的な標準形式です。
- テストごとのステータス、タイミング、失敗の詳細を記録します。
- その普遍性により、1つのCI連携で多くのフレームワークを扱えます。