Compatibilidad

Test Impact Analysis es compatible en dd-java-agent >= 1.27.0.

Se admiten los siguientes marcos de tests:

  • JUnit >= 4.10 y >= 5.3
  • TestNG >= 6.4
  • Spock >= 2.0
  • Cucumber >= 5.4.0
  • Karate >= 1.0.0
  • Scalatest >= 3.0.8

Configuración

Test Optimization

Antes de configurar Test Impact Analysis, configura Test Optimization para Java. Si informas de los datos a través del Agent, utiliza v6.40 y posteriores o v7.40 y posteriores.

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.

Ejecutar tests con Test Impact Analysis activado

Una vez finalizada la configuración, ejecuta los tests como lo haces normalmente:

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 \
// run your tests

Desactivar la omisión de tests específicos

Puedes anular el comportamiento de Test Impact Analysis y evitar que se omitan tests específicos. Estos tests se denominan tests no omitibles.

¿Por qué hacer que los tests sean no omitibles?

Test Impact Analysis utiliza datos de cobertura del código para determinar si deben omitirse tests o no. En algunos casos, estos datos pueden no ser suficientes para tomar esta determinación.

Algunos ejemplos son:

  • Tests que leen datos de archivos de texto
  • Tests que interactúan con API ajenas al código que se está probando (como las API REST remotas).
  • Designar los tests como no omitibles garantiza que Test Impact Analysis los ejecute independientemente de los datos de cobertura.

Compatibilidad

Los tests no omitibles son compatibles con las siguientes versiones y marcos de tests:

  • JUnit >= 4.10 y >= 5.3
  • TestNG >= 6.4
  • Spock >= 2.2
  • Cucumber >= 5.4.0
  • Scalatest >= 3.0.8

Hacer que los tests sean no omitible

Caso de test individual

Añade una JUnit Tag con el valor datadog_itr_unskippable a tu caso de test para marcarlo como no omitible.

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

Conjunto de tests

Añade una JUnit Tag con el valor datadog_itr_unskippable a tu conjunto de tests para marcarlo como no omitible.

Si un conjunto está marcado como no omitible, ninguno de los casos de test de ese conjunto puede ser omitido por 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() {
    // ...
  }
}

Caso de test individual

Añade una JUnit Category con el valor datadog_itr_unskippable a tu caso de test para marcarlo como no omitible. No es necesario crear el datadog_itr_unskippable para cada caso de test o conjunto de tests, y una categoría es suficiente para todo el proyecto.

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

Conjunto de tests

Añade una JUnit Tag con el valor datadog_itr_unskippable a tu caso de test para marcarlo como no omitible. No es necesario crear el datadog_itr_unskippable para cada caso de test o conjunto de tests, y una categoría es suficiente para todo el proyecto.

Si un conjunto está marcado como no omitible, ninguno de los casos de test de ese conjunto puede ser omitido por 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 {}
}

Caso de test individual

Añade un grupo con el valor datadog_itr_unskippable a tu caso de test para marcarlo como no omitible.

import org.testng.annotations.Test;

public class MyTestSuite {

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

Conjunto de tests

Añade un grupo con el valor datadog_itr_unskippable a tu conjunto de tests para marcarlo como no omitible.

Si un conjunto está marcado como no omitible, ninguno de los casos de test de ese conjunto puede ser omitido por Test Impact Analysis.

import org.testng.annotations.Test;

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

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

Caso de test individual

Añade un spock.lang.Tag con el valor datadog_itr_unskippable a tu caso de test para marcarlo como no omitible.

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

class MyTestSuite extends Specification {

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

Conjunto de tests

Añade un spock.lang.Tag con el valor datadog_itr_unskippable a tu conjunto de tests para marcarlo como no omitible.

Si un conjunto está marcado como no omitible, ninguno de los casos de test de ese conjunto puede ser omitido por Test Impact Analysis.

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

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

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

Escenario individual

Añade una etiqueta (tag) datadog_itr_unskippable a tu escenario Gherkin para marcarlo como no omitible.

Feature: My Feature

  @datadog_itr_unskippable
  Scenario: My Scenario
    # ...

Función

Añade una etiqueta datadog_itr_unskippable a tu función Gherkin para marcarla como no omitible.

Si una función está marcada como no omitible, ninguno de los escenarios de esa función puede ser omitido por Test Impact Analysis.

@datadog_itr_unskippable
Feature: My Feature

  Scenario: My Scenario
    # ...

Crea una Tag con el valor datadog_itr_unskippable y etiqueta tu caso de test con ella:

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

Para leer más

PREVIEWING: guacbot/translation-pipeline