Optimización de tests en Datadog

La optimización de tests no está disponible en el sitio seleccionado () en este momento.

Información general

La optimización de tests ofrece una vista del estado de tu CI que prioriza los tests al mostrar métricas y resultados importantes de tus tests. Puede ayudarte a investigar los problemas de rendimiento y las fallas de tests que son más relevantes para tu trabajo, centrándose en el código del que eres responsable, en lugar de en los procesos que ejecutan tus pruebas.

Configuración

Selecciona una opción para configurar la optimización de tests en Datadog:

.net
java
javascript
python
ruby
swift
go
upload junit tests to datadog

Además de los tests, la optimización de tests proporciona visibilidad para toda la fase de tests de tu proyecto.

Funciones compatibles

.NETJava/JVM‑basedJavaScriptPythonRubySwiftGoJUnit Xml
Resultados precisos de tiempo/duración

Resolución de microsegundos en el tiempo de inicio y duración del test.

Trazas distribuidas en tests de integración

Los tests que realizan llamadas a servicios externos instrumentados con Datadog muestran la traza (trace) distribuida completa en tus detalles del test.

Informes basados ​​en el Agent

Capacidad de brindar información de tests a través del Datadog Agent.

Informes sin Agent

Capacidad de brindar información de tests sin el Datadog Agent.

Visibilidad a nivel de conjunto de tests

Visibilidad para todo el proceso de prueba, incluidas sesiones, módulos, conjuntos y tests.

API manual

Capacidad de crear mediante programación eventos de visibilidad de CI para marcos de test que no son compatibles con la instrumentación automática de Datadog.

Propietario de código por test

Detección automática del propietario de un archivo de test basado en el archivo CODEOWNERS.

(parcialmente)
Inicio/fin del código fuente

Informe automático de las líneas de inicio y final de un test.

(solo inicio) (solo inicio) (solo inicio)
CI e información de Git

Recopilación automática de metadatos del entorno de Git y CI, como el proveedor de CI, el SHA de confirmación de Git o la URL del pipeline.

Carga de metadatos de Git

Carga automática de la información del árbol de Git utilizada para el Análisis del impacto de los tests.

Análisis del impacto de tests*

Capacidad para habilitar el Análisis del impacto de los tests, que omite de forma inteligente los tests en función de la cobertura del código y los metadatos de Git.

Soporte de cobertura de código

Capacidad para brindar información de las métricas de cobertura de código total.

(manual)
Soporte de tests de referencia

Detección automática de estadísticas de rendimiento para tests de referencia.

Tests parametrizados

Detección automática de tests parametrizados.

Detección temprana de defectos*

Repetir tests nuevos automáticamente para detectar defectos.

Repetir tests automáticamente*

Repetir tests fallidos automáticamente hasta N veces para evitar que la compilación falle debido a defectos en los tests.

Integración de Selenium RUM

Vincular sesiones del navegador a casos de testsautomáticamente al probar aplicaciones instrumentadas con RUM.

* Esta función es opcional y debe activarse en la página Configuración de optimización de pruebas.

Configuraciones por defecto

Los tests evalúan el comportamiento del código para un conjunto de condiciones dadas. Algunas de esas condiciones están relacionadas con el entorno en el que se ejecutan los tests, como el sistema operativo o el entorno de ejecución utilizado. El mismo código ejecutado bajo diferentes conjuntos de condiciones puede comportarse de manera diferente, por lo que los desarrolladores generalmente configuran sus tests para que se ejecuten en diferentes conjuntos de condiciones y validan que el comportamiento sea el esperado para todas ellas. Este conjunto específico de condiciones se denomina configuración.

En la optimización de tests, un test con varias configuraciones se trata como varios tests con un test independiente para cada configuración. En el caso de que una de las configuraciones falle, pero las otras no, solo esa combinación específica de test y configuración se marca como fallida.

Por ejemplo, supongamos que estás probando una única confirmación y tienes un test de Python que se ejecuta en tres versiones diferentes de Python. Si el test falla en una de esas versiones, ese test específico se marca como fallido, mientras que las otras versiones se marcan como aprobadas. Si repites los tests en la misma confirmación y ahora el test para las tres versiones de Python no falla, el test con la versión que falló anteriormente se marcará como aprobado y con defectos, mientras que las otras dos versiones permanecen aprobadas, sin que se detecte ninguna falla.

Probar los atributos de configuración

Cuando ejecutas tus tests con la optimización de tests, la biblioteca detecta e informa sobre el entorno en el que se ejecutan los tests como etiquetas (tags) de test. Por ejemplo, el nombre del sistema operativo, como Windows o Linux, y la arquitectura de la plataforma, como arm64 o x86_64, se agregan como etiquetas en cada test. Estos valores se muestran en las páginas de confirmación y de información general de la rama cuando un test falla o es defectuoso para una configuración específica, pero no para otras.

Las siguientes etiquetas se recopilan automáticamente para identificar configuraciones de test y algunas pueden aplicarse solo a plataformas específicas:

Nombre de la etiquetaDescripción
os.platformNombre del sistema operativo en el que se ejecutan los tests.
os.familyFamilia del sistema operativo donde se ejecutan los tests.
os.versionVersión del sistema operativo donde se ejecutan los tests.
os.architectureArquitectura del sistema operativo donde se ejecutan los tests.
runtime.nameNombre del sistema de ejecución de los tests.
runtime.versionVersión del sistema de ejecución.
runtime.vendorProveedor que compiló la plataforma de ejecución en la que se ejecutan los tests.
runtime.architectureArquitectura del sistema de ejecución de los tests.
device.modelEl modelo de dispositivo que ejecuta los tests.
device.nameNombre del dispositivo.
ui.appearanceEstilo de la interfaz de usuario.
ui.orientationOrientación en la que se ejecuta la interfaz de usuario.
ui.localizationLenguaje de la solicitud.

Configuraciones de tests parametrizados

Cuando se ejecutan tests parametrizados, la biblioteca detecta y genera información sobre los parámetros utilizados. Los parámetros son parte de la configuración del test, por lo que el mismo caso de test ejecutado con diferentes parámetros se considera como dos pruebas diferentes en la optimización de tests.

Si un parámetro de test no es determinista y tiene un valor diferente cada vez que se ejecuta un test, cada ejecución de test se considera un nuevo test en la optimización de tests. Como consecuencia, es posible que algunas funciones del producto no funcionen correctamente para dichos tests: historial de ejecuciones, detección de defectos, análisis del impacto de los tests y otras.

Algunos ejemplos de parámetros de test no deterministas son:

  • fecha actual
  • un valor aleatorio
  • un valor que depende del entorno de ejecución del test (como una ruta de archivo absoluta o el nombre de usuario actual)
  • un valor que no tiene una representación de cadena determinista (por ejemplo, una instancia de una clase Java cuyo método toString() no se anula)

Evita utilizar parámetros de test no deterministas. En caso de que esto no sea posible, algunos marcos de test ofrecen una forma de especificar una representación de cadena determinista para un parámetro no determinista (como anular el nombre de visualización del parámetro).

Configuraciones personalizadas

Hay algunas configuraciones que no se pueden identificar directamente ni informar de forma automática porque pueden depender de variables de entorno, argumentos de ejecución de tests u otros enfoques que utilizan los desarrolladores. En esos casos, debes proporcionar los detalles de configuración a la biblioteca para que la optimización de tests pueda identificarlos correctamente.

Define estas etiquetas como parte de la variable de entorno DD_TAGS con el prefijo test.configuration.

Por ejemplo, las siguientes etiquetas de configuración de test identifican una configuración de test donde el tiempo de respuesta del disco es lento y la memoria disponible es baja:

DD_TAGS=test.configuration.disk:slow,test.configuration.memory:low

Todas las etiquetas con el prefijo test.configuration se utilizan como etiquetas de configuración, además de las recopiladas automáticamente.

Nota: No se admiten las etiquetas test.configuration anidadas, como test.configuration.cpu.memory.

Para filtrar utilizando estas etiquetas de configuraciones, debes crear facetas para estas etiquetas.

Mejora el flujo de trabajo de tu desarrollador

Integra la optimización de tests con herramientas para informar datos de cobertura de código, mejorar los tests del navegador con RUM y acceder a información en todas las plataformas al agilizar la identificación y resolución de problemas en tu ciclo de desarrollo.


Utilizar los datos de los tests CI

When Test Visibility is enabled, the following data is collected from your project:

  • Test names and durations.
  • Predefined environment variables set by CI providers.
  • Git commit history including the hash, message, author information, and files changed (without file contents).
  • Information from the CODEOWNERS file.

Al crear un dashboard o un notebook, puedes utilizar datos de tests CI en tu consulta de búsqueda, lo que actualiza las opciones del widget de visualización. Para obtener más información, consulta la documentación de Dashboards y Notebooks.

Alertas sobre los datos de los tests

Cuando estés evaluando tests fallidos o defectuosos, o el rendimiento de un test CI, puedes exportar tu consulta de búsqueda en el Explorador de optimización de tests a un monitor de tests CI haciendo clic en el botón Export.

Referencias adicionales