This product is not supported for your selected Datadog site. ().

互換性

Test Impact Analysis は dd-java-agent >= 1.27.0 でサポートされています。

以下のテストフレームワークがサポートされています。

  • JUnit >= 4.10 および >= 5.3
  • TestNG >= 6.4
  • Spock >= 2.0
  • Cucumber >= 5.4.0
  • Karate >= 1.0.0
  • ScalaTest 3.0.8 以上

セットアップ

テストの最適化

Test Impact Analysis を設定する前に、Java 向け Test Optimization をセットアップしてください。Agent 経由でデータを報告する場合は、v6.40 以降または v7.40 以降を使用してください。

テストサービスの Test Impact Analysis を有効にする

あなた、またはあなたの組織で Intelligent Test Runner Activation (intelligent_test_runner_activation_write) 権限を持つユーザーが、テストサービス設定ページで Test Impact Analysis を有効にする必要があります。

Test Impact Analysis enabled in test service settings in the CI section of Datadog.

Test Impact Analysis を有効にしてテストを実行する

設定が完了したら、通常通りテストを実行します。

DD_CIVISIBILITY_ENABLED=true \
DD_ENV=ci \
DD_SERVICE=my-java-app \
GRADLE_OPTS=-javaagent:$DD_TRACER_FOLDER/dd-java-agent.jar \
./gradlew clean test
DD_CIVISIBILITY_ENABLED=true \
DD_ENV=ci \
DD_SERVICE=my-java-app \
MAVEN_OPTS=-javaagent:$DD_TRACER_FOLDER/dd-java-agent.jar \
mvn clean verify
DD_CIVISIBILITY_ENABLED=true \
DD_ENV=ci \
DD_SERVICE=my-java-app \
JAVA_TOOL_OPTIONS=-javaagent:$DD_TRACER_FOLDER/dd-java-agent.jar \
// テストを実行

特定のテストに対するスキップの無効化

Test Impact Analysis の動作を上書きし、特定のテストがスキップされないようにできます。これらのテストは unskippable テストと呼ばれます。

テストをスキップできないようにする理由は?

Test Impact Analysis はコード カバレッジ データを使用してテストをスキップすべきかどうかを判断します。場合によっては、このデータだけでは判断が不十分なことがあります。

例:

  • テキストファイルからデータを読み込むテスト
  • テスト対象のコード以外の API とやりとりするテスト (リモートの REST API など)
  • テストを unskippable に指定すると、カバレッジ データに関係なく Test Impact Analysis によって常に実行されます。

互換性

スキップできないテストは、以下のバージョンとテストフレームワークでサポートされています。

  • JUnit >= 4.10 および >= 5.3
  • TestNG >= 6.4
  • Spock >= 2.2
  • Cucumber >= 5.4.0
  • ScalaTest 3.0.8 以上

unskippable テストの指定方法

個別のテスト ケース

テスト ケースをスキップ不可にするには、JUnit Tagdatadog_itr_unskippable を追加します。

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Tags;
import org.junit.jupiter.api.Test;

public class MyTestSuite {

  @Test
  @Tags({@Tag("datadog_itr_unskippable")})
  public void myTest() {
    // ...
  }
}

テストスイート

テスト スイートをスキップ不可にするには、JUnit Tagdatadog_itr_unskippable を追加します。

スイートがスキップ不可に指定されている場合、そのスイート内のテスト ケースは Test Impact Analysis によりスキップされません。

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Tags;
import org.junit.jupiter.api.Test;

@Tags({@Tag("datadog_itr_unskippable")})
public class MyTestSuite {

  @Test
  public void myTest() {
    // ...
  }
}

個別のテスト ケース

“テスト ケースをスキップ不可にするには、JUnit Categorydatadog_itr_unskippable を追加します。 すべてのテスト ケースまたはテスト スイートごとに datadog_itr_unskippable を作成する必要はありません。プロジェクト 全体で 1 つの Category で十分です。”

import org.junit.Test;
import org.junit.experimental.categories.Category;

public class MyTestSuite {

  @Category(datadog_itr_unskippable.class)
  @Test
  public void myTest() {
    // ...
  }

  public interface datadog_itr_unskippable {}
}

テストスイート

“テスト スイートをスキップ不可にするには、JUnit Tagdatadog_itr_unskippable を追加します。 すべてのテスト ケースまたはテスト スイートごとに datadog_itr_unskippable を作成する必要はありません。プロジェクト全体で 1 つの Category で十分です。”

スイートがスキップ不可に指定されている場合、そのスイート内のテスト ケースは Test Impact Analysis によりスキップされません。

import org.junit.Test;
import org.junit.experimental.categories.Category;

@Category(MyTestSuite.datadog_itr_unskippable.class)
public class MyTestSuite {

  @Test
  public void myTest() {
    // ...
  }

  public interface datadog_itr_unskippable {}
}

個別のテスト ケース

テスト ケースをスキップ不可にするには、datadog_itr_unskippable グループをテスト ケースに追加します。

import org.testng.annotations.Test;

public class MyTestSuite {

  @Test(groups = "datadog_itr_unskippable")
  public void myTest() {
    // ...
  }
}

テストスイート

テスト スイートをスキップ不可にするには、datadog_itr_unskippable グループをテスト スイートに追加します。

スイートがスキップ不可に指定されている場合、そのスイート内のテスト ケースは Test Impact Analysis によりスキップされません。

import org.testng.annotations.Test;

@Test(groups = "datadog_itr_unskippable")
public class MyTestSuite {

  @Test
  public void myTest() {
    // ...
  }
}

個別のテスト ケース

テスト ケースをスキップ不可にするには、spock.lang.Tagdatadog_itr_unskippable を追加します。

import spock.lang.Specification
import spock.lang.Tag

class MyTestSuite extends Specification {

  @Tag("datadog_itr_unskippable")
  def myTest() {
    // ...
  }
}

テストスイート

テスト スイートをスキップ不可にするには、spock.lang.Tagdatadog_itr_unskippable を追加します。

スイートがスキップ不可に指定されている場合、そのスイート内のテスト ケースは Test Impact Analysis によりスキップされません。

import spock.lang.Specification
import spock.lang.Tag

@Tag("datadog_itr_unskippable")
class MyTestSuite extends Specification {

  def myTest() {
    // ...
  }
}

個別のシナリオ

Gherkin シナリオをスキップ不可にするには、datadog_itr_unskippable タグを追加します。

Feature: My Feature

  @datadog_itr_unskippable
  Scenario: My Scenario
    # ...

機能

Gherkin フィーチャーをスキップ不可にするには、datadog_itr_unskippable タグを追加します。

フィーチャーがスキップ不可に指定されている場合、そのフィーチャー内のシナリオは Test Impact Analysis によりスキップされません。

@datadog_itr_unskippable
Feature: My Feature

  Scenario: My Scenario
    # ...

datadog_itr_unskippable 値を持つ Tag を作成し、それをテスト ケースに付与します。

import org.scalatest.Tag
import org.scalatest.flatspec.AnyFlatSpec

object ItrUnskippableTag extends Tag("datadog_itr_unskippable")

class MyTestSuite extends AnyFlatSpec {
  "myTest" should "assert something" taggedAs ItrUnskippableTag in {
    // ...
  }
}

その他の参考資料