Join the Beta!

Java のための Intelligent Test Runner はベータ版です。

互換性

Intelligent Test Runner は dd-java-agent >= 1.22.0 でサポートされています。

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

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

セットアップ

Test Visibility

Intelligent Test Runner をセットアップする前に、Test Visibility for Java をセットアップしてください。Agent を通してデータを報告する場合は、v6.40 以降または v7.40 以降を使用してください。

Activate Intelligent Test Runner 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 the Intelligent Test Runner on the Test Service Settings page.

Intelligent test runner enabled in test service settings in the CI section of Datadog.

Intelligent Test Runner を有効にしたテストの実行

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

./gradlew cleanTest test -Dorg.gradle.jvmargs=\
-javaagent:$DD_TRACER_FOLDER/dd-java-agent.jar=\
dd.civisibility.enabled=true,\
dd.env=ci,\
dd.service=my-java-app
MAVEN_OPTS=-javaagent:$DD_TRACER_FOLDER/dd-java-agent.jar=\
dd.civisibility.enabled=true,\
dd.env=ci,\
dd.service=my-java-app \
mvn clean verify

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

Intelligent Test Runner の動作をオーバーライドして、特定のテストがスキップされないようにすることができます。これらのテストは、スキップできないテストと呼ばれます。

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

Intelligent Test Runner は、テストをスキップすべきかどうかを判断するために、コードカバレッジデータを使用します。場合によっては、このデータだけでは判断できないこともあります。

例:

  • テキストファイルからデータを読み込むテスト
  • テスト対象のコード以外の API とやりとりするテスト (リモートの REST API など)
  • テストをスキップ不可に指定すると、カバレッジデータに関係なく Intelligent Test Runner がテストを実行します。

互換性

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

  • JUnit >= 4.10 および >= 5.3
  • TestNG >= 6.4
  • Spock >= 2.2
  • Cucumber >= 5.4.0

テストをスキップ不可にマークする

個別のテストケース

datadog_itr_unskippable を指定した JUnit Tag をテストケースに追加して、スキップ不可とマークします。

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

テストスイート

datadog_itr_unskippable を指定した JUnit Tag をテストスイートに追加して、スキップ不可とマークします。

スイートがスキップ不可とマークされている場合、ITR によってそのスイートのテストケースをスキップすることはできません。

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

個別のテストケース

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

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

テストスイート

datadog_itr_unskippable を指定した JUnit Tag をテストスイートに追加して、スキップ不可とマークします。 すべてのテストケースやテストスイートに対して datadog_itr_unskippable を作成する必要はありません。プロジェクト全体に対して 1 つのカテゴリーで十分です。

スイートがスキップ不可とマークされている場合、ITR によってそのスイートのテストケースをスキップすることはできません。

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 を指定したグループをテストスイートに追加して、スキップ不可とマークします。

スイートがスキップ不可とマークされている場合、ITR によってそのスイートのテストケースをスキップすることはできません。

import org.testng.annotations.Test;

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

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

個別のテストケース

datadog_itr_unskippable を指定した spock.lang.Tag をテストケースに追加して、スキップ不可とマークします。

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

class MyTestSuite extends Specification {

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

テストスイート

datadog_itr_unskippable を指定した spock.lang.Tag をテストスイートに追加して、スキップ不可とマークします。

スイートがスキップ不可とマークされている場合、ITR によってそのスイートのテストケースをスキップすることはできません。

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 タグを追加して、スキップ不可とマークします。

機能がスキップ不可とマークされている場合、その機能のシナリオは ITR によってスキップされることはありません。

@datadog_itr_unskippable
Feature: My Feature

  Scenario: My Scenario
    # ...

その他の参考資料