単体テストレポートの例
- プラン: 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出力フラグ |
|---|---|---|
| .NET | JunitXML.TestLogger | --logger:"junit;LogFilePath=report.xml" |
| C/C++ | GoogleTest | --gtest_output="xml:report.xml" |
| C/C++ | CUnit | CUnitCI.hマクロで自動。 |
| Flutter/Dart | junitreport | | tojunit -o report.xml |
| Go | gotestsum | --junitfile report.xml |
| Helm | helm-unittest | -t JUnit -o report.xml |
| Java | Gradle | build/test-results/test/で自動。 |
| Java | Maven | target/surefire-reports/およびtarget/failsafe-reports/で自動。 |
| JavaScript | jest-junit | --reporters=jest-junit |
| JavaScript | karma-junit-reporter | --reporters junit |
| JavaScript | mocha-gitlab-reporter | --reporter mocha-gitlab-reporter |
| PHP | PHPUnit | --log-junit report.xml |
| Python | pytest | --junitxml=report.xml |
| Ruby | rspec_junit_formatter | --format RspecJunitFormatter --out report.xml |
| Rust | cargo2junit | | 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実行可能ファイルが異なるアーキテクチャ (x86、x64、またはarm) 用に作成されている場合は、各テストが一意のファイル名を持つようにしてください。結果はその後、集約されます。
CUnit
CUnitCI.hマクロを使用してCUnitでJUnit XMLレポートを生成します:
cunit:
stage: test
script:
- ./my-cunit-test
artifacts:
when: always
reports:
junit: ./my-cunit-test.xmlFlutterまたは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.xmlHelm
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-unittestがtests/ディレクトリで.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複数のテストタスクが定義されている場合、gradleはbuild/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-*.xmlJavaScript
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.xmlMocha
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.xmlphpunit.xml設定ファイルでXMLを使用してこのオプションを設定することもできます。
Python
Pythonでpytestを使用してJUnit XMLレポートを生成します:
pytest:
stage: test
script:
- pytest --junitxml=report.xml
artifacts:
when: always
reports:
junit: report.xmlRuby
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.xmlRust
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.xmlcargo testからJSON出力を取得するには、nightlyコンパイラを有効にする必要があります。このツールは現在のディレクトリにインストールされます。