選択した Datadog サイト () はサポートされていません。

: Datadog では、JUnit XML ファイルのアップロードよりもネイティブインスツルメンテーションを推奨しています。ネイティブインスツルメンテーションは、より正確な時間結果を提供し、インテグレーションテストでの分散型トレーシングをサポートし、構造化スタックトレースをサポートするからです。

概要

JUnit テストレポートファイルは、テスト名とスイート名、合格/不合格ステータス、期間、場合によってはエラーログなどのテスト実行情報を含む XML ファイルです。JUnit テストフレームワークによって導入されたものの、他の多くの人気のフレームワークでもこの形式を使用して結果を出力することができます。

テストフレームワークで JUnit XML のテストレポートを生成できる場合、Datadog トレーサーを使用したネイティブのテストインスツルメンテーションに代わる軽量な方法として、これらを使用することができます。JUnit XML レポートからインポートされたテスト結果は、トレーサーからレポートされたテストデータと一緒に表示されます。

互換性

サポートされている Datadog トレーシングライブラリ

Datadog ライブラリバージョン
datadog-ci>= 2.17.0

Datadog CI CLI のインストール

npm を使用して datadog-ci CLI をグローバルにインストールします。

npm install -g @datadog/datadog-ci

スタンドアロンバイナリ (ベータ版)

: スタンドアロンバイナリはベータ版であり、その安定性は保証されていません。

CI で Node.js をインストールすることに問題がある場合は、スタンドアロンバイナリが Datadog CI リリースで提供されています。linux-x64darwin-x64 (MacOS)、win-x64 (Windows) のみがサポートされています。インストールするには、ターミナルで以下を実行します。

curl -L --fail "https://github.com/DataDog/datadog-ci/releases/latest/download/datadog-ci_linux-x64" --output "/usr/local/bin/datadog-ci" && chmod +x /usr/local/bin/datadog-ci

次に、datadog-ci と任意のコマンドを実行します:

datadog-ci version
curl -L --fail "https://github.com/DataDog/datadog-ci/releases/latest/download/datadog-ci_darwin-x64" --output "/usr/local/bin/datadog-ci" && chmod +x /usr/local/bin/datadog-ci

次に、datadog-ci と任意のコマンドを実行します:

datadog-ci version
Invoke-WebRequest -Uri "https://github.com/DataDog/datadog-ci/releases/latest/download/datadog-ci_win-x64.exe" -OutFile "datadog-ci.exe"

次に、Start-Process -FilePath "datadog-ci.exe" と任意のコマンドを実行します:

Start-Process -FilePath "./datadog-ci.exe" -ArgumentList version

テストレポートのアップロード

JUnit XML テストレポートを Datadog にアップロードするには、次のコマンドを実行し、--service パラメーターを使用してテストされたサービスまたはライブラリの名前を指定し、XML レポートファイルへの直接のファイルパスまたはそれらを含むディレクトリへの 1 つ以上のファイルパスを指定します。

datadog-ci junit upload --service <service_name> <path> [<path> ...]

DATADOG_API_KEY 環境変数に有効な Datadog API キーを指定し、DD_ENV 環境変数にテストが実行された環境を指定します (たとえば、開発者ワークステーションから結果をアップロードする場合は local、CI プロバイダーから結果をアップロードする場合は ci)。例:


DD_ENV=ci DATADOG_API_KEY=<api_key> DATADOG_SITE= datadog-ci junit upload \
  --service my-api-service \
  unit-tests/junit-reports e2e-tests/single-report.xml

テストが失敗した場合でも、CI でこのコマンドが実行されることを確認してください。通常、テストが失敗すると、CI のジョブは実行を中止し、アップロードコマンドは実行されません。

ステータスチェック関数を使用します。

steps:
  - name: Run tests
    run: ./run-tests.sh
  - name: Upload test results to Datadog
    if: always()
    run: datadog-ci junit upload --service service_name ./junit.xml

after_script セクションを使用します。

test:
  stage: test
  script:
    - ./run-tests.sh
  after_script:
    - datadog-ci junit upload --service service_name ./junit.xml

post セクションを使用します。

pipeline {
  agent any
  stages {
    stage('Run tests') {
      steps {
        sh './run-tests.sh'
      }
      post {
        always {
          sh 'datadog-ci junit upload --service service_name ./junit.xml'
        }
      }
    }
  }
}

CI システムがサブシェルを許可している場合

$(./run-tests.sh); export tests_exit_code=$?
datadog-ci junit upload --service service_name ./junit.xml
if [ $tests_exit_code -ne 0 ]; then exit $tests_exit_code; fi

250 MiB より大きいレポートは完全に処理されず、テストやログが欠落する可能性があります。最高の体験を得るために、レポートが 250 MiB 以下であることを確認してください。

構成設定

これは、datadog-ci junit upload コマンドを使用するときに使用できるオプションの完全なリストです。

--service (必須)
テスト中のサービスまたはライブラリの名前。
環境変数: DD_SERVICE
: my-api-service
--env
テストが実行された環境。
環境変数: DD_ENV
: ci
--tags
すべてのテストにアタッチされる key:value 形式のキーと値のペア (--tags パラメーターは複数回指定できます)。DD_TAGS を使用してタグを指定する場合は、カンマを使用してタグを区切ります (例: team:backend,priority:high)。
環境変数: DD_TAGS
デフォルト: (none)
: team:backend
: --tagsDD_TAGS 環境変数を使用して指定されたタグがマージされます。--tagsDD_TAGS の両方に同じキーが表示される場合、環境変数 DD_TAGS の値が優先されます。
--metrics
すべてのテストにアタッチされる key:number 形式のキーと数値のペア (--metrics パラメータは複数回指定可能)。DD_METRICS を使用してメトリクスを指定する場合は、カンマで区切ってください (例: memory_allocations:13,test_importance:2)。
環境変数: DD_METRICS
デフォルト: (none)
: memory_allocations:13
: --metrics と環境変数 DD_METRICS で指定したメトリクスはマージされます。同じキーが --metricsDD_METRICS の両方にある場合は、環境変数 DD_METRICS の値が優先されます。
--report-tags
key:value 形式のキーと値のペア。--tags パラメーターと同じような働きをしますが、これらのタグはセッションレベルでのみ適用され、環境変数 DD_TAGS とマージされません。
デフォルト: (なし)
: test.code_coverage.enabled:true
--report-metrics
key:123 形式のキーと値のペア。--metrics パラメーターと同じような働きをしますが、これらのタグはセッションレベルでのみ適用され、環境変数 DD_METRICS とマージされません。
デフォルト: (なし)
: test.code_coverage.lines_pct:82
--xpath-tag
キーと xpath 式を key=expression の形式で指定します。これにより、ファイル内のテスト用タグをカスタマイズできます (--xpath-tag パラメーターは複数回指定できます)。
サポートされている式の詳細については、XPath 式によるメタデータの提供を参照してください。
デフォルト: (なし)
: test.suite=/testcase/@classname
: --xpath-tag を使用し、--tags または DD_TAGS 環境変数とともに指定されたタグはマージされます。xpath-tag の値は通常テストごとに異なるため、最優先されます。
--logs
XML レポートの内容を Logs として転送できるようにします。<system-out><system-err><failure> 内のコンテンツはログとして収集されます。<testcase> 内の要素からのログは自動的にテストに接続されます。
環境変数: DD_CIVISIBILITY_LOGS_ENABLED
デフォルト: false
: Logs は CI Visibility とは別請求となります。
--max-concurrency
API への同時アップロードの数。
デフォルト: 20
--dry-run
実際にファイルを Datadog にアップロードせずにコマンドを実行します。他のすべてのチェックが実行されます。
デフォルト: false
--skip-git-metadata-upload
git メタデータのアップロードをスキップするために使用するフラグ。git メタデータをアップロードしたい場合は、–skip-git-metadata-upload=0 または –skip-git-metadata-upload=false を渡すことができます。
デフォルト: true
--git-repository-url
git メタデータを取得するリポジトリの URL。この引数を渡さなかった場合、URL はローカルの git リポジトリから取得されます。
デフォルト: ローカルの git リポジトリ
: git@github.com:DataDog/documentation.git
--verbose
コマンドの出力の詳細度を高めるために使用するフラグ
デフォルト: false
位置引数
JUnit XML レポートが配置されているファイルパスまたはディレクトリ。ディレクトリを渡すと、CLI はその中のすべての .xml ファイルを検索します。

次の環境変数がサポートされています。

DATADOG_API_KEY (必須)
リクエストの認証に使用される Datadog API キー
デフォルト: (なし)

さらに、選択したサイトを使用するように Datadog サイトを構成します ():

DATADOG_SITE (必須)
結果をアップロードする Datadog サイト
デフォルト: datadoghq.com
選択したサイト:

Git のメタデータを収集する

Datadog uses Git information for visualizing your test results and grouping them by repository, branch, and commit. Git metadata is automatically collected by the test instrumentation from CI provider environment variables and the local .git folder in the project path, if available.

If you are running tests in non-supported CI providers or with no .git folder, you can set the Git information manually using environment variables. These environment variables take precedence over any auto-detected information. Set the following environment variables to provide Git information:

DD_GIT_REPOSITORY_URL
URL of the repository where the code is stored. Both HTTP and SSH URLs are supported.
Example: git@github.com:MyCompany/MyApp.git, https://github.com/MyCompany/MyApp.git
DD_GIT_BRANCH
Git branch being tested. Leave empty if providing tag information instead.
Example: develop
DD_GIT_TAG
Git tag being tested (if applicable). Leave empty if providing branch information instead.
Example: 1.0.1
DD_GIT_COMMIT_SHA
Full commit hash.
Example: a18ebf361cc831f5535e58ec4fae04ffd98d8152
DD_GIT_COMMIT_MESSAGE
Commit message.
Example: Set release number
DD_GIT_COMMIT_AUTHOR_NAME
Commit author name.
Example: John Smith
DD_GIT_COMMIT_AUTHOR_EMAIL
Commit author email.
Example: john@example.com
DD_GIT_COMMIT_AUTHOR_DATE
Commit author date in ISO 8601 format.
Example: 2021-03-12T16:00:28Z
DD_GIT_COMMIT_COMMITTER_NAME
Commit committer name.
Example: Jane Smith
DD_GIT_COMMIT_COMMITTER_EMAIL
Commit committer email.
Example: jane@example.com
DD_GIT_COMMIT_COMMITTER_DATE
Commit committer date in ISO 8601 format.
Example: 2021-03-12T16:00:28Z

Git メタデータのアップロード

datadog-ci バージョン 2.9.0 以降では、CI Visibility は Git のメタデータ情報 (コミット履歴) を自動的にアップロードします。このメタデータには、ファイル名は含まれていますが、ファイルのコンテンツは含まれていません。この動作を無効にしたい場合は、フラグ --skip-git-metadata-upload を渡します。

環境構成メタデータの収集

Datadog では、特別な専用タグを使用して、OS、ランタイム、デバイス情報など、テストが実行される環境の構成を特定します (該当する場合)。同じコミットに対する同じテストが複数の構成で実行される場合 (例えば、Windows 上と Linux 上)、タグは障害やフレーク性の検出におけるテストの区別に使用されます。

これらの特別なタグは、 datadog-ci junit upload を呼び出すときに --tags パラメーターを使用するか、環境変数 DD_TAGS を設定することで指定することができます。

これらのタグはすべて任意であり、指定したものだけが環境構成の区別に使用されます。

test.bundle
テストスイートのグループを個別に実行するために使用します。
: ApplicationUITestsModelTests
os.platform
オペレーティングシステムの名称。
: windowslinuxdarwin
os.version
オペレーティングシステムのバージョン。
: 10.15.414.3.295
os.architecture
オペレーティングシステムのアーキテクチャ。
: x64x86arm64
runtime.name
言語インタープリターまたはプログラミングランタイムの名前。
: .NET.NET CoreOpenJDK Runtime EnvironmentJava(TM) SE Runtime EnvironmentCPython
runtime.version
ランタイムのバージョン。
: 5.0.03.1.7
runtime.vendor
ランタイムベンダーの名前 (該当する場合)。例えば、Java ランタイムを使用する場合。
: AdoptOpenJDKOracle Corporation
runtime.architecture
ランタイムのアーキテクチャ。
: x64x86arm64

モバイルアプリの場合 (Swift、Android):

device.model
テストするデバイスのモデル。
: iPhone11,4AppleTV5,3
device.name
テストするデバイスの名前。
: iPhone 12 Pro SimulatoriPhone 13 (QA team)

XPath 式によるメタデータの提供

アップロードされた XML レポートに含まれるすべてのテストにカスタムタグをグローバルに適用する --tags CLI パラメーターと DD_TAGS 環境変数に加え、--xpath-tag パラメーターは、XML 内の各種属性から各テストにタグを追加するカスタムルールを提供します。

提供されるパラメーターは key=expression の形式でなければならず、key は追加されるカスタムタグの名前、expression はサポートされている有効な XPath 式になります。

XPath 構文が馴染みが深いため使用されますが、サポートされている式は下記のみとなります。

/testcase/@attribute-name
<testcase attribute-name="value"> から取得する XML 属性。
/testcase/../@attribute-name
現在の <testcase> の親である <testsuite attribute-name="value"> から取得する XML 属性。
/testcase/..//property[@name='property-name']
現在の <testcase> の親である <testsuite> 内の<property name="property-name" value="value"> から取得する value 属性。
/testcase//property[@name='property-name']
現在の <testcase> 内の <property name="property-name" value="value"> から取得する value 属性。

例:

テストの test.suite タグは、デフォルトで <testsuite name="suite name"> から読み込まれます。ただし、一部のプラグインでは、<testcase classname="TestSuite"> でより良い値が報告される可能性があります。

test.suite タグの value 1value 2SomeTestSuiteClassOtherTestSuiteClass に変更するには

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite tests="1" failures="0" time="0.030000" name="value 1">
    <testcase classname="SomeTestSuiteClass" name="test_something" time="0.030000"></testcase>
  </testsuite>
  <testsuite tests="1" failures="0" time="0.021300" name="value 2">
    <testcase classname="OtherTestSuiteClass" name="test_something" time="0.021300"></testcase>
  </testsuite>
</testsuites>
datadog-ci junit upload --service service_name \
  --xpath-tag test.suite=/testcase/@classname ./junit.xml

各テストに value 1value 2 の値とともに custom_tag を追加する方法:

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite tests="1" failures="0" time="0.020000" name="SomeTestSuiteClass">
    <testcase name="test_something" time="0.010000" attr="value 1"></testcase>
    <testcase name="test_other" time="0.010000" attr="value 2"></testcase>
  </testsuite>
</testsuites>
datadog-ci junit upload --service service_name \
  --xpath-tag custom_tag=/testcase/@attr ./junit.xml

各テストに value 1value 2 の値とともに custom_tag を追加する方法:

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite tests="1" failures="0" time="0.030000" name="SomeTestSuiteClass">
    <properties>
      <property name="prop" value="value 1"></property>
    </properties>
    <testcase name="test_something" time="0.030000" attr="value 1"></testcase>
  </testsuite>
  <testsuite tests="1" failures="0" time="0.021300" name="OtherTestSuiteClass">
    <properties>
      <property name="prop" value="value 1"></property>
    </properties>
    <testcase name="test_something" time="0.021300" attr="value 1"></testcase>
  </testsuite>
</testsuites>
datadog-ci junit upload --service service_name \
  --xpath-tag custom_tag=/testcase/..//property[@name=\'prop\'] ./junit.xml

注: 名前は引用符で囲む必要があります。Bash では、バックスラッシュを使って引用符をエスケープしなければなりません。例えば、[@name='prop'] は `[@name='prop'] と入力します。

Git for Windows の Bash を使用する際は、MSYS_NO_PATHCONV=1 環境変数を定義します。 この定義を行わなかった場合、/ で始まるすべての引数が Windows パスに展開されます。

プロパティ要素によるメタデータの提供

特定のテストに追加のタグを指定するもう 1 つの方法は、<testsuite> または <testcase> 要素内に <property name="dd_tags[key]" value="value"> 要素を含める方法です。これらのタグを <testcase> 要素に追加すると、そのテストスパンにタグが格納されます。タグを <testsuite> 要素に追加すると、そのスイートの全てのテストスパンにタグが格納されます。

この処理を行うには、<property> 要素の name 属性が dd_tags[key] という形式である必要があります。ここで key は追加されるカスタムタグの名前です。その他のプロパティは無視されます。

: <testcase> 要素にタグを追加する。

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite tests="1" failures="0" time="0.030000" name="SomeTestSuiteClass">
    <testcase classname="SomeTestSuiteClass" name="test_something" time="0.010000">
      <properties>
        <property name="dd_tags[custom_tag]" value="some value"></property>
        <property name="dd_tags[runtime.name]" value="CPython"></property>
      </properties>
    </testcase>
  </testsuite>
</testsuites>

: <testsuite> 要素にタグを追加する。

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite tests="1" failures="0" time="0.030000" name="SomeTestSuiteClass">
    <properties>
      <property name="dd_tags[custom_tag]" value="some value"></property>
      <property name="dd_tags[runtime.name]" value="CPython"></property>
    </properties>
    <testcase classname="SomeTestSuiteClass" name="test_something" time="0.010000"></testcase>
  </testsuite>
</testsuites>

Datadog に送信する値は文字列なので、ファセットは辞書順で表示されます。文字列の代わりに整数を送信するには、--metrics フラグと DD_METRICS 環境変数を使用します。

コードカバレッジを報告する

--report-metrics オプションを利用し、test.code_coverage.lines_pct メトリクスを設定することで、指定された JUnit レポートのコードカバレッジをレポートすることが可能です。

datadog-ci junit upload --service my-api-service --report-metrics test.code_coverage.lines_pct:82 unit-tests/junit-reports e2e-tests/single-report.xml

詳しくは、コードカバレッジを参照してください。

その他の参考資料