正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

単体テストレポートの例

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

これらの例を、さまざまな言語やテストフレームワークで単体テストレポートを設定するためのガイドラインとして使用してください。単体テストレポートには、テストフレームワークがJUnit XML形式の出力を生成し、CI/CDジョブが結果をアーティファクトとしてアップロードする必要があります。

次の例は、.gitlab-ci.ymlファイルに追加する個々のジョブ設定を示しています。すべての例で以下を使用しています:

  • テストが失敗した場合でもレポートをアップロードするためのartifacts:when: always
  • JUnit XMLファイルの場所を指定するためのartifacts:reports:junit
  • 必要な場合のbefore_scriptでのパッケージのインストール。

各例は、プロジェクトに合わせてコピーおよび変更できる機能的なジョブです。必要に応じて以下を行います:

  • 環境に合わせてimage:仕様を追加または変更します。
  • 依存関係に合わせてパッケージのインストールコマンドを変更します。
  • プロジェクトの構造に合わせてファイルのパスを変更します。
  • テスト設定に合わせてテストコマンドを更新します。

セットアップ手順とトラブルシューティングについては、単体テストレポートを参照してください。

ツール別のJUnit出力設定

言語ツールJUnit出力フラグ
.NETJunitXML.TestLogger--logger:"junit;LogFilePath=report.xml"
C/C++GoogleTest--gtest_output="xml:report.xml"
C/C++CUnitCUnitCI.hマクロで自動。
Flutter/Dartjunitreport| tojunit -o report.xml
Gogotestsum--junitfile report.xml
Helmhelm-unittest-t JUnit -o report.xml
JavaGradlebuild/test-results/test/で自動。
JavaMaventarget/surefire-reports/およびtarget/failsafe-reports/で自動。
JavaScriptjest-junit--reporters=jest-junit
JavaScriptkarma-junit-reporter--reporters junit
JavaScriptmocha-gitlab-reporter--reporter mocha-gitlab-reporter
PHPPHPUnit--log-junit report.xml
Pythonpytest--junitxml=report.xml
Rubyrspec_junit_formatter--format RspecJunitFormatter --out report.xml
Rustcargo2junit| cargo2junit > report.xml

.NET

NuGetパッケージJunitXML.TestLoggerを使用して、.NETでJUnit XMLレポートを生成します:

Test:
  stage: test
  script:
    - 'dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=..\artifacts\{assembly}-test-result.xml;MethodFormat=Class;FailureBodyFormat=Verbose"'
  artifacts:
    when: always
    paths:
      - ./**/*test-result.xml
    reports:
      junit:
        - ./**/*test-result.xml

この例では、リポジトリのルートフォルダーにソリューションがあり、サブフォルダーに1つ以上のプロジェクトファイルがあることを想定しています。テストプロジェクトごとに1つの結果ファイルが生成され、各ファイルはアーティファクトフォルダーに配置されます。引数をフォーマットすることで、テストウィジェット内のテストデータの可読性が向上します。

C/C++

GoogleTest

組み込みのXML出力を使用して、GoogleTestでJUnit XMLレポートを生成します:

cpp:
  stage: test
  script:
    - gtest.exe --gtest_output="xml:report.xml"
  artifacts:
    when: always
    reports:
      junit: report.xml

複数のgtest実行可能ファイルが異なるアーキテクチャ (x86x64、またはarm) 用に作成されている場合は、各テストが一意のファイル名を持つようにしてください。結果はその後、集約されます。

CUnit

CUnitCI.hマクロを使用してCUnitでJUnit XMLレポートを生成します:

cunit:
  stage: test
  script:
    - ./my-cunit-test
  artifacts:
    when: always
    reports:
      junit: ./my-cunit-test.xml

FlutterまたはDart

FlutterまたはDartでjunitreportパッケージを使用してJUnit XMLレポートを生成します:

test:
  stage: test
  script:
    - flutter test --machine | tojunit -o report.xml
  artifacts:
    when: always
    reports:
      junit:
        - report.xml

この例では、junitreportパッケージを使用して、flutter test出力をJUnitレポートXML形式に変換します。

Go

Goでgotestsumを使用してJUnit XMLレポートを生成します:

golang:
  stage: test
  script:
    - go install gotest.tools/gotestsum@latest
    - gotestsum --junitfile report.xml --format testname
  artifacts:
    when: always
    reports:
      junit: report.xml

Helm

HelmでHelm Unittestプラグインを使用してJUnit XMLレポートを生成します:

helm:
  image: helmunittest/helm-unittest:latest
  stage: test
  script:
    - '-t JUnit -o report.xml -f tests/*[._]test.yaml .'
  artifacts:
    when: always
    reports:
      junit: report.xml

-f tests/*[._]test.yamlフラグは、helm-unittesttests/ディレクトリで.test.yamlまたは_test.yamlのいずれかで終わるファイルを探すように設定します。

Java

Gradle

組み込みのテスト報告を使用して、GradleでJUnit XMLレポートを生成します:

java:
  stage: test
  script:
    - gradle test
  artifacts:
    when: always
    reports:
      junit: build/test-results/test/**/TEST-*.xml

複数のテストタスクが定義されている場合、gradlebuild/test-results/の下に複数のディレクトリを生成します。その場合、次のパスを定義することで、グロブマッチングを活用できます: build/test-results/test/**/TEST-*.xml

Maven

SurefireおよびFailsafeテストレポートを使用してMavenでJUnit XMLレポートを生成します:

java:
  stage: test
  script:
    - mvn verify
  artifacts:
    when: always
    reports:
      junit:
        - target/surefire-reports/TEST-*.xml
        - target/failsafe-reports/TEST-*.xml

JavaScript

Jest

jest-junit NPMパッケージを使用してJestでJUnit XMLレポートを生成します:

javascript:
  image: node:latest
  stage: test
  before_script:
    - 'yarn global add jest'
    - 'yarn add --dev jest-junit'
  script:
    - 'jest --ci --reporters=default --reporters=jest-junit'
  artifacts:
    when: always
    reports:
      junit:
        - junit.xml

単体テストを含む.test.jsファイルがない場合でもジョブを成功させるには、script:セクションのjestコマンドの最後に--passWithNoTestsフラグを追加します。

Karma

karma-junit-reporter NPMパッケージを使用してKarmaでJUnit XMLレポートを生成します:

javascript:
  stage: test
  script:
    - karma start --reporters junit
  artifacts:
    when: always
    reports:
      junit:
        - junit.xml

Mocha

Mochaの設定例については、mocha-gitlab-reporterを参照してください。

PHP

PHPでPHPUnitを使用してJUnit XMLレポートを生成します:

phpunit:
  stage: test
  script:
    - composer install
    - vendor/bin/phpunit --log-junit report.xml
  artifacts:
    when: always
    reports:
      junit: report.xml

phpunit.xml設定ファイルでXMLを使用してこのオプションを設定することもできます。

Python

Pythonでpytestを使用してJUnit XMLレポートを生成します:

pytest:
  stage: test
  script:
    - pytest --junitxml=report.xml
  artifacts:
    when: always
    reports:
      junit: report.xml

Ruby

rspec_junit_formatter gemを使用してRSpecでJUnit XMLレポートを生成します:

ruby:
  image: ruby:3.0.4
  stage: test
  before_script:
    - apt-get update -y && apt-get install -y bundler
  script:
    - bundle install
    - bundle exec rspec --format progress --format RspecJunitFormatter --out rspec.xml
  artifacts:
    when: always
    paths:
      - rspec.xml
    reports:
      junit: rspec.xml

Rust

Rustでcargo2junitを使用してJUnit XMLレポートを生成します:

run unittests:
  image: rust:latest
  stage: test
  before_script:
    - cargo install --root . cargo2junit
  script:
    - cargo test -- -Z unstable-options --format json --report-time | bin/cargo2junit > report.xml
  artifacts:
    when: always
    reports:
      junit:
        - report.xml

cargo testからJSON出力を取得するには、nightlyコンパイラを有効にする必要があります。このツールは現在のディレクトリにインストールされます。