Skip to content
Latchkey

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はアサーションメッセージとともにその中にネストします。

A minimal JUnit XML report
<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プラットフォームがそれをパースしてテストを表示・追跡します。

関連ガイド