Datadog の Test Optimization

This product is not supported for your selected Datadog site. ().
learning center
ラーニングセンターで Test Optimization を使い始めてみてください

テストモニタリングを設定し、不安定なテストを特定して、重要なテストのみを実行するために Test Impact Analysis を使用することで、CI パイプラインを加速する方法を学びましょう。

今すぐ登録する

概要

Test Optimization は、テストからの重要なメトリクスと結果を表示することで、CI 状態のテストファーストビューを提供します。これにより、テストを実行するパイプラインではなく、担当しているコードに焦点を当てて、作業に最も関連するパフォーマンスの問題やテストの失敗を調査できます。

セットアップ

Datadog で Test Optimization を構成するためにオプションを選択してください。

.net
java
javascript
python
ruby
swift
go
JUnit テストを Datadog にアップロード

Test Optimization はテストだけでなく、プロジェクトのテスト工程全体を可視化します。

サポートされる機能

.NETJava/JVM ベースJavascriptPythonRubySwiftGoJUnit Xml
正確な時刻/継続時間結果

テスト開始時刻と継続時間におけるマイクロ秒単位の分解能

インテグレーションテストの分散型トレース

Datadog でインスツルメンテーションされた外部サービスを呼び出すテストは、テストの詳細で完全な分散型トレースを表示します。

Agent ベースのレポート

Datadog Agent を通じてテスト情報を報告する能力。

エージェントレスレポート

Datadog Agent を使用せずにテスト情報を報告する能力。

テストスイートレベルの視覚化

セッション、モジュール、スイート、テストなど、テスト工程全体を可視化します。

手動 API

Datadog の自動インスツルメンテーションでサポートされていないテストフレームワーク用の CI Visibility イベントをプログラム的に作成する能力。

テストごとのコード所有者

CODEOWNERS ファイルに基づくテストの所有者の自動検出。

(部分的)
ソースコードの開始/終了

テストの開始行と終了行の自動レポート。

(開始のみ) (開始のみ)
CI と git 情報

CI プロバイダー、git コミット SHA、パイプライン URL などの git 環境や CI 環境のメタデータの自動収集。

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

Test Impact Analysis に使用される git ツリー情報の自動アップロード。

Test Impact Analysis *

コードカバレッジと git メタデータに基づいてインテリジェントにテストをスキップする Test Impact Analysis を有効にする機能。

コードカバレッジサポート

総コードカバレッジのメトリクスを報告する能力。

(手動)
ベンチマークテストのサポート

ベンチマークテストのパフォーマンス統計の自動検出。

パラメーター化されたテスト

パラメーター化されたテストの自動検出。

Early Flake Detection *

新規テストを再試行して不安定性を検出します (自動)。

テストの自動再試行 *

失敗したテストを自動的に最大 N 回再試行し、テストの不安定性によるビルド失敗を回避します。

失敗したテストのリプレイ *

再試行される失敗したテストのローカル変数の情報にアクセスできます。

Selenium RUM インテグレーション

RUM が組み込まれたアプリケーションをテストする際、ブラウザセッションをテストケースに自動的にリンクします。

* この機能はオプトイン (任意有効化) であり、[Test Optimization Settings] (Test Optimization の設定) ページで有効化が必要です。

デフォルト構成

テストは、与えられた条件のセットに対するコードの振る舞いを評価します。これらの条件の中には、OS や使用されるランタイムなど、テストが実行される環境に関連するものもあります。同じコードでも、異なる条件下で実行されると動作が異なる可能性があるため、開発者は通常、異なる条件下でテストを実行するように構成し、すべての条件下で期待どおりの動作が得られるかどうかを検証します。この特定の条件のセットを構成と呼びます。

Test Optimization では、複数の構成を持つテストは、それぞれの構成ごとに別個のテストとして扱われます。構成の 1 つが失敗し、その他の構成は成功した場合、その特定のテストと構成の組み合わせのみが失敗としてマークされます。

たとえば、単一のコミットをテストしていて、1 つの Python テストを 3 つの異なる Python バージョンに対して実行するとします。そのうち 1 つのバージョンでテストが失敗した場合、その特定のテストは失敗としてマークされますが、その他のバージョンは成功としてマークされます。同じコミットに対してテストを再試行し、今度は 3 つの Python バージョンのすべてでテストが成功した場合、以前に失敗したバージョンのテストは成功と不安定の両方としてマークされますが、他の 2 つのバージョンは成功のままで、不安定性は検出されません。

テスト構成属性

Test Optimization を使用してテストを実行すると、テストが実行される環境に関する情報をライブラリが検出し、テストタグとして報告します。たとえば、WindowsLinux などのオペレーティングシステム名や、arm64x86_64 などのプラットフォームのアーキテクチャが、各テストのタグとして追加されます。これらの値は、特定の構成でテストが失敗したり不安定であったりした場合に、コミットやブランチの概要ページで表示されます。

以下のタグは、テスト構成を特定するために自動的に収集されます。特定のプラットフォームにのみ適用されるものもあります。

タグ名説明
os.platformテストが実行されるオペレーティングシステムの名前。
os.familyテストが実行されるオペレーティングシステムの系列。
os.versionテストが実行されるオペレーティングシステムのバージョン。
os.architectureテストが実行されるオペレーティングシステムのアーキテクチャ。
runtime.nameテスト用ランタイムシステムの名前。
runtime.versionランタイムシステムのバージョン。
runtime.vendorテストを実行するランタイムプラットフォームを構築したベンダー。
runtime.architectureテスト用ランタイムシステムのアーキテクチャ。
device.modelテストを実行しているデバイスのモデル。
device.nameデバイスの名前。
ui.appearanceユーザーインターフェイスのスタイル。
ui.orientationUI が実行されるオリエンテーション。
ui.localizationアプリケーションの言語。

パラメーター化されたテストの構成

パラメーター化されたテストを実行すると、使用されたパラメーターに関する情報をライブラリが検出して報告します。パラメーターはテスト構成の一部であるため、同じテストケースでも異なるパラメーターで実行された場合、Test Optimization では 2 つの異なるテストとして扱われます。

テストパラメーターが非決定的で、テストを実行するたびに異なる値になる場合、Test Optimization では各テスト実行が新規テストとして扱われます。その結果、実行履歴、不安定検出、Test Impact Analysis などの一部の機能が正しく動作しない場合があります。

非決定的なテストパラメーターの例としては、以下のようなものがあります。

  • 現在の日付
  • ランダム値
  • テスト実行環境に依存する値 (絶対パスや現在のユーザー名など)
  • 決定的な文字列表現を持たない値 (toString() メソッドがオーバーライドされていない Java クラスのインスタンスなど)

非決定的なテストパラメーターの使用は避けてください。どうしても避けられない場合は、一部のテストフレームワークが、非決定的パラメーターに対して決定的な文字列表現を指定する方法 (パラメーター表示名をオーバーライドするなど) を提供しています。

カスタム構成

環境変数やテスト実行時の引数など、開発者が使用するアプローチに依存する場合があるために、直接識別して自動的に報告することができない構成もあります。そのような場合は、Test Optimization がそれらを適切に識別できるように、ライブラリに構成の詳細を提供する必要があります。

これを行うには、DD_TAGS 環境変数で test.configuration のプレフィックスを使用してタグを定義します。

たとえば、以下のテスト構成タグは、ディスクの応答時間が遅くメモリが少ないテスト構成を識別します。

DD_TAGS=test.configuration.disk:slow,test.configuration.memory:low

自動的に収集されたタグに加えて、test.configuration というプレフィックスを持つすべてのタグが構成タグとして使用されます。

注: test.configuration.cpu.memory のようにネストされた test.configuration タグはサポートされていません。

こうした構成タグを使用してフィルタリングするには、これらのタグのファセットを作成する必要があります

開発者ワークフローを強化する

コードカバレッジデータを報告するツールと Test Optimization を統合し、RUM を使用してブラウザテストを強化し、開発サイクルにおける問題の特定と解決の効率化を通じてプラットフォーム全体のインサイトを得ましょう。


CI テストデータの使用

When Test Visibility is enabled, the following data is collected from your project:

  • Test names and durations.
  • Predefined environment variables set by CI providers.
  • Git commit history including the hash, message, author information, and files changed (without file contents).
  • Information from the CODEOWNERS file.

ダッシュボードまたはノートブックを作成する際、検索クエリで CI テストデータを使用すると、視覚化ウィジェットのオプションが更新されます。詳細については、ダッシュボードおよびノートブックのドキュメントを参照してください。

テストデータに対するアラート

失敗したテストや不安定なテスト、あるいは CI テストのパフォーマンスを評価するとき、Test Optimization Explorer での検索クエリを CI Test モニターにエクスポートできます。[Export] (エクスポート) ボタンをクリックするとエクスポートが実行されます。

参考資料