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 以降を使用してください。

Activate Test Impact Analysis for the test service

You, or a user in your organization with the Intelligent Test Runner Activation (intelligent_test_runner_activation_write) permission, must activate Test Impact Analysis on the Test Service Settings page.

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 {
    // ...
  }
}

その他の参考資料