JUnit XMLレポートとは?
JUnit XMLレポートは、テスト結果のための標準的なXMLフォーマットで、それを生成したtest frameworkに関係なく、ほぼすべてのCIシステムが読み取れます。
名前とは裏腹に、JUnit XMLフォーマットはJavaやJUnitに縛られていません。それはテストレポートの共通語になりました。pytest、Jest、Go、PHPUnit、その他ほとんどのrunnerが生成でき、ほとんどのCIプラットフォームがパースできます。その共通フォーマットこそが、どんなCIツールでもどんな言語のテストごとの結果も表示できる理由です。
なぜ名前が誤解を招くのか
このフォーマットはJUnit frameworkから生まれましたが、それをはるかに超えて広まりました。今日「JUnit XML」はツールではなく構造を指します。PythonやGoのスイートは、CIシステムがJavaのスイートのものと同一に表示するJUnit XMLレポートを生成でき、それがまさに狙いです。
構造
JUnit XMLファイルは、testsuite要素の中にtestcase要素をグループ化します。各testcaseは名前、クラス、timeを記録し、failureとerrorはメッセージとスタックトレースを持つ子要素として現れ、スキップされたテストにも印が付きます。この階層はCIツールが結果を表示する方法にきれいに対応します。
簡単な例
フォーマットはプレーンなXMLです。各テストはtestcaseで、failureはアサーションメッセージとともにその中にネストします。
<testsuite tests="2" failures="1">
<testcase name="adds" time="0.01"/>
<testcase name="subtracts">
<failure message="expected 1, got 2"/>
</testcase>
</testsuite>なぜ重要か
- 実質的にすべてのCIプラットフォームが理解する。
- frameworkと言語に依存しない。
- テストごとの表示と傾向追跡を可能にする。
- 失敗に対するpull requestの注釈を支える。
CIにおけるJUnit XML
runnerがJUnit XMLファイルを書き出すよう設定し、次にCIのstepまたはactionをそこに向けて結果を公開します。CIはXMLをパースし、各テストを表示し、pull requestに失敗を注釈します。ファイルの生成は安価なので、高速runnerはスイートが終わった瞬間にレポートを利用可能に保ちます。
重要なポイント
- JUnit XMLはテスト結果のためのframework非依存の標準です。
- 名前は広い採用より前からあり、Java固有ではありません。
- ほぼすべてのCIプラットフォームがそれをパースしてテストを表示・追跡します。