- 重要な情報
- はじめに
- 用語集
- ガイド
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- Service Management
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
JUnit テストレポートファイルは、テスト名とスイート名、合格/不合格ステータス、期間、場合によってはエラーログなどのテスト実行情報を含む XML ファイルです。JUnit テストフレームワークによって導入されたものの、他の多くの人気のフレームワークでもこの形式を使用して結果を出力することができます。
テストフレームワークで JUnit XML のテストレポートを生成できる場合、Datadog トレーサーを使用したネイティブのテストインスツルメンテーションに代わる軽量な方法として、これらを使用することができます。JUnit XML レポートからインポートされたテスト結果は、トレーサーからレポートされたテストデータと一緒に表示されます。
サポートされている Datadog トレーシングライブラリ
Datadog ライブラリ | バージョン |
---|---|
datadog-ci | >= 2.17.0 |
npm
を使用して datadog-ci
CLI をグローバルにインストールします。
npm install -g @datadog/datadog-ci
CI で Node.js をインストールすることに問題がある場合は、スタンドアロンバイナリが Datadog CI リリースで提供されています。linux-x64、darwin-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
ステータスチェック関数を使用します。
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
team:backend
--tags
と DD_TAGS
環境変数を使用して指定されたタグがマージされます。--tags
と DD_TAGS
の両方に同じキーが表示される場合、環境変数 DD_TAGS
の値が優先されます。--metrics
key:number
形式のキーと数値のペア (--metrics
パラメータは複数回指定可能)。DD_METRICS
を使用してメトリクスを指定する場合は、カンマで区切ってください (例: memory_allocations:13,test_importance:2
)。DD_METRICS
memory_allocations:13
--metrics
と環境変数 DD_METRICS
で指定したメトリクスはマージされます。同じキーが --metrics
と DD_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
key=expression
の形式で指定します。これにより、ファイル内のテスト用タグをカスタマイズできます (--xpath-tag
パラメーターは複数回指定できます)。test.suite=/testcase/@classname
--xpath-tag
を使用し、--tags
または DD_TAGS
環境変数とともに指定されたタグはマージされます。xpath-tag の値は通常テストごとに異なるため、最優先されます。--logs
<system-out>
、<system-err>
、<failure>
内のコンテンツはログとして収集されます。<testcase>
内の要素からのログは自動的にテストに接続されます。DD_CIVISIBILITY_LOGS_ENABLED
false
--max-concurrency
20
--dry-run
false
--skip-git-metadata-upload
true
--git-repository-url
git@github.com:DataDog/documentation.git
--verbose
false
.xml
ファイルを検索します。次の環境変数がサポートされています。
DATADOG_API_KEY
(必須)さらに、選択したサイトを使用するように Datadog サイトを構成します ():
DATADOG_SITE
(必須)datadoghq.com
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
git@github.com:MyCompany/MyApp.git
, https://github.com/MyCompany/MyApp.git
DD_GIT_BRANCH
develop
DD_GIT_TAG
1.0.1
DD_GIT_COMMIT_SHA
a18ebf361cc831f5535e58ec4fae04ffd98d8152
DD_GIT_COMMIT_MESSAGE
Set release number
DD_GIT_COMMIT_AUTHOR_NAME
John Smith
DD_GIT_COMMIT_AUTHOR_EMAIL
john@example.com
DD_GIT_COMMIT_AUTHOR_DATE
2021-03-12T16:00:28Z
DD_GIT_COMMIT_COMMITTER_NAME
Jane Smith
DD_GIT_COMMIT_COMMITTER_EMAIL
jane@example.com
DD_GIT_COMMIT_COMMITTER_DATE
2021-03-12T16:00:28Z
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
ApplicationUITests
、ModelTests
os.platform
windows
、linux
、darwin
os.version
10.15.4
、14.3.2
、95
os.architecture
x64
、x86
、arm64
runtime.name
.NET
、.NET Core
、OpenJDK Runtime Environment
、Java(TM) SE Runtime Environment
、CPython
runtime.version
5.0.0
、3.1.7
runtime.vendor
AdoptOpenJDK
、Oracle Corporation
runtime.architecture
x64
、x86
、arm64
モバイルアプリの場合 (Swift、Android):
device.model
iPhone11,4
、AppleTV5,3
device.name
iPhone 12 Pro Simulator
、iPhone 13 (QA team)
アップロードされた 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 1
、value 2
を SomeTestSuiteClass
、OtherTestSuiteClass
に変更するには
<?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 1
、value 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 1
、value 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'] と入力します。
特定のテストに追加のタグを指定するもう 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
詳しくは、コードカバレッジを参照してください。
お役に立つドキュメント、リンクや記事: