Este producto no es compatible con el sitio Datadog seleccionado. ().

Compatibilidad

Test Impact Analysis sólo es compatible con las siguientes versiones y marcos de test:

  • pytest>=7.2.0
    • De ddtrace>=2.1.0.
    • De Python>=3.7.
    • Requiere coverage>=5.5.
    • Incompatible con pytest-cov (consulta limitaciones conocidas)
  • unittest
    • De ddtrace>=2.2.0.
    • De Python>=3.7.
  • coverage

Configuración

Test Optimization (optimización de tests)

Antes de configurar Test Impact Analysis, configura Test Optimization (optimización de tests) para Python. Si vas a informar de los datos a través del Agent, utiliza la versión 6.40 y versiones posteriores o 7.40 y versiones 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.

Dependencias necesarias

Test Impact Analysis requiere el paquete coverage.

Instala el paquete en tu entorno de test de CI especificándolo en el archivo de requisitos correspondiente, por ejemplo, o utilizando pip:

pip install coverage

Consulta limitaciones conocidas si ya estás utilizando el paquete coverage o un complemento como pytest-cov.

Ejecución de tests con Test Impact Analysis activado

Test Impact Analysis se activa cuando se ejecutan tests con la integración de Datadog activa. Ejecuta tus tests con el siguiente comando:

DD_ENV=ci DD_SERVICE=my-python-app pytest --ddtrace
DD_ENV=ci DD_SERVICE=my-python-app ddtrace-run python -m unittest

Desactivación temporal de Test Impact Analysis

Test Impact Analysis puede desactivarse localmente estableciendo la variable de entorno DD_CIVISIBILITY_ITR_ENABLED en false o 0.

DD_CIVISIBILITY_ITR_ENABLED (opcional)
habilita las funciones de cobertura y omisión de tests de Test Impact Analysis
Por defecto: (true)

Ejecuta el siguiente comando para desactivar Test Impact Analysis:

DD_ENV=ci DD_SERVICE=my-python-app DD_CIVISIBILITY_ITR_ENABLED=false pytest --ddtrace
DD_ENV=ci DD_SERVICE=my-python-app DD_CIVISIBILITY_ITR_ENABLED=false ddtrace-run python -m unittest

Desactivación de la omisión de test 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é no se pueden omitir los tests?

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 APIs 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

En las siguientes versiones se admiten los tests no omitibles:

  • pytest
    • De ddtrace>=1.19.0.

Marcar tests como no omitibles

Puedes utilizar la marca skipif de pytest para evitar que Test Impact Analysis omita tests o módulos individuales. Especifica la condition como False y la reason como "datadog_itr_unskippable".

Tests individuales

Los tests individuales pueden marcarse como no omitibles utilizando el decorador @pytest.mark.skipif de la siguiente manera:

import pytest

@pytest.mark.skipif(False, reason="datadog_itr_unskippable")
def test_function():
    assert True

Módulos

Los módulos pueden omitirse utilizando la variable global pytestmark de la siguiente manera:

import pytest

pytestmark = pytest.mark.skipif(False, reason="datadog_itr_unskippable")

def test_function():
    assert True

Nota: Esto no anula ninguna otra marca skip, o skipif que tenga una condition que evalúe en True.

Compatibilidad

En las siguientes versiones se admiten los tests no omitibles:

  • unittest
    • De ddtrace>=2.2.0.

Marcar tests como no omitibles en unittest

Puedes utilizar la marca skipif de unittest para evitar que Test Impact Analysis omita tests individuales. Especifica la condition como False y la reason como "datadog_itr_unskippable".

Tests individuales

Los tests individuales pueden marcarse como no omitibles utilizando el decorador @unittest.skipif de la siguiente manera:

import unittest

class MyTestCase(unittest.TestCase):
  @unittest.skipIf(False, reason="datadog_itr_unskippable")
  def test_function(self):
      assert True

El uso de @unittest.skipif no anula ninguna otra marca skip, ni las marcas skipIf que tengan una condition que evalúe en True.

Limitaciones conocidas

Recopilación de cobertura de código

Interacción con las herramientas de cobertura

Los datos de cobertura pueden aparecer incompletos cuando Test Impact Analysis está activado. Las líneas de código que normalmente estarían cubiertas por los tests no lo están cuando estos tests se omiten.

Interacción con el paquete de cobertura

Test Impact Analysis utiliza la API del paquete coverage para recopilar la cobertura del código. Los datos de coverage run o de complementos como pytest-cov están incompletos debido a que ddtrace utiliza la clase Coverage.

Algunas condiciones race pueden provocar excepciones al utilizar complementos de pytest como pytest-xdist que cambian el orden de ejecución de los tests o introducen paralelización.

Referencias adicionales