OpenTelemetry

Esta característica requiere el paquete NuGet Microsoft.Testing.Extensions.OpenTelemetry .

Esta extensión integra OpenTelemetry con Microsoft. Testing.Platform (MTP), lo que permite que las ejecuciones de pruebas emitan seguimientos y métricas a través del SDK de OpenTelemetry estándar.

Nota:

Esta extensión está disponible en MTP a partir de la versión 2.1.0.

Importante

A partir de MTP 2.4.0, la extensión OpenTelemetry sigue la versión de lanzamiento de MTP y sus puntos de entrada públicos ya no son experimentales.

Elección de la propiedad del proveedor

Elija si MTP o su aplicación posee los proveedores de OpenTelemetry.

Utiliza proveedores propiedad de MTP

Desactive el punto de entrada generado automáticamente (<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>) y llame a AddOpenTelemetryProvider en su método Main:

var builder = await TestApplication.CreateBuilderAsync(args);

builder.AddOpenTelemetryProvider(
    withTracing: tracing => tracing
        .AddTestingPlatformInstrumentation()
        .AddConsoleExporter(),
    withMetrics: metrics => metrics
        .AddTestingPlatformInstrumentation()
        .AddConsoleExporter()
);

using var app = await builder.BuildAsync();
return await app.RunAsync();

Para configurar la instrumentación, los atributos de recursos y un exportador de OTLP desde variables de entorno estándar OTEL_* , llame a:

builder.AddOpenTelemetryProviderFromEnvironment();

El método añade instrumentación solo cuando se configura un exportador o se pasa una llamada de retorno de configuración, por lo que puede dejar el registro en la aplicación cuando algunos entornos no exporten telemetría.

Uso de proveedores propiedad de la aplicación

A partir de la versión preliminar de MTP 2.5, llame a AddTestingPlatformDiagnostics cuando su aplicación ya configura OpenTelemetry a través de Aspire ServiceDefaults, Microsoft.Extensions.Hosting o de otra raíz de composición. Este método activa la fuente de actividad y el medidor Microsoft.Testing.Platform sin crear, vaciar ni liberar un TracerProvider o un MeterProvider.

Suscríbete al proveedor propiedad de la aplicación con AddTestingPlatformInstrumentation en sus generadores de rastreo y métricas. La aplicación conserva la propiedad de sus proveedores, exportadores, identidad de recursos y eliminación.

Para un punto de entrada hospedado generado por MSBuild, haga referencia a Microsoft.Testing.Extensions.Hosting, establezca TestingPlatformHostFactory en el método de fábrica del host y establezca:

<TestingPlatformOpenTelemetryMode>HostOwned</TestingPlatformOpenTelemetryMode>

HostOwned solo llama a AddTestingPlatformDiagnostics; no crea proveedores ni reemplaza la identidad del recurso del host. Para conocer los requisitos de la factoría y del ciclo de vida del host, consulte Integración del host.

API

AddTestingPlatformDiagnostics

Activa la fuente de actividad y el medidor de MTP para los oyentes propiedad de la aplicación o los proveedores de OpenTelemetry sin transferir la propiedad del proveedor a MTP.

AddOpenTelemetryProvider

Registra el proveedor OpenTelemetry en ITestApplicationBuilder. Acepta dos callbacks opcionales:

  • withTracing: configura el TracerProviderBuilder para el seguimiento distribuido.
  • withMetrics: configura el MeterProviderBuilder para la recopilación de métricas.

AddTestingPlatformInstrumentation

Llame a TracerProviderBuilder o MeterProviderBuilder para suscribirse al origen y al medidor de actividad Microsoft.Testing.Platform integrados.

AddTestingPlatformResource

Llame a ResourceBuilder para agregar atributos del ensamblado de prueba, del host, del sistema operativo y del entorno de ejecución. El detector también identifica el proveedor de CI, el pipeline, la rama y la información del commit para Acciones de GitHub, Azure Pipelines, GitLab CI y Jenkins.

Ayudantes de recursos específicos

Para un proveedor que pertenece a la aplicación, llame a AddTestingPlatformTestResource para agregar una identidad específica para pruebas y a AddTestingPlatformCIResource para agregar información de procedencia de la CI y del control de código fuente. Estos asistentes especializados no sustituyen los atributos host.*, os.*, process.* o service.* de la aplicación.

AddOpenTelemetryProviderFromEnvironment

Configura el trazado, las métricas, la detección de recursos y un exportador OTLP a partir de las variables de entorno estándar de OpenTelemetry. OTEL_SDK_DISABLED=true deshabilita la integración. Configure OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTERo OTEL_EXPORTER_OTLP_ENDPOINT para activar la exportación.

Origen y medidor de actividad

La extensión emite telemetría bajo el nombre:

  • Origen de la actividad: Microsoft.Testing.Platform
  • Medidor: Microsoft.Testing.Platform

Convenciones semánticas

MTP emite atributos estándar de OpenTelemetry para pruebas y código para los que existe una convención, incluidos code.stacktrace, error.type, code.file.path, code.line.number, code.function.name, test.suite.name, test.case.result.status y test.case.name. Las pruebas fallidas establecen el estado del tramo en Error y añaden un evento exception.

MTP amplía las convenciones con estados de resultado adicionales (skipped, error, timeout, cancelledy unknown) y atributos de prueba para los conceptos que OpenTelemetry no define. Para conservar los paneles existentes, los nombres de atributos e instrumentos heredados permanecen habilitados de forma predeterminada.

Cuando el proceso de lanzamiento proporciona TRACEPARENT y TRACESTATE, MTP sitúa la ejecución de prueba bajo esa traza en lugar de iniciar una traza raíz no relacionada.

Intervalos de ejecución de MSTest

A partir de la versión preliminar de MSTest 4.5 y MTP 2.5, las ejecuciones nativas de MSTest usan una actividad canónica propiedad de MTP para cada ejecución de prueba. MSTest hace que la actividad esté actualizada mientras ejecuta el constructor de prueba, la inicialización, el método de prueba, la limpieza y el código personalizado TestMethodAttribute . Las actividades HttpClient, SQL, Entity Framework, WCF y personalizadas instrumentadas automáticamente pasan a ser, por lo tanto, secundarias de la actividad de prueba.

MTP agrega el resultado final, el tiempo, la salida y los artefactos a la misma actividad y los detiene en la hora de finalización de la ejecución registrada por MSTest. Este comportamiento evita intervalos de resultados y marcos duplicados y evita que el procesamiento de resultados asincrónico infla la duración de la prueba.

Los marcos de pruebas que no usan la API de ejecución canónica conservan la topología de compatibilidad: la actividad de ejecución del marco y la actividad de resultados de MTP siguen siendo actividades hermanas, y la actividad de resultados se vincula a la actividad que estaba activa cuando el marco publicó la actualización de progreso.

Métricas emitidas

Instrumento Tipo Unidad Description
test.case.duration Histograma s Duración de la prueba, agrupada por estado del resultado y conjunto de pruebas.
test.case.result.count Contador {test} Pruebas completadas, agrupadas por estado del resultado y conjunto de pruebas.
test.case.active UpDownCounter {test} Pruebas que se están ejecutando actualmente.
test.run.duration Histograma s Duración de la ejecución, agrupada por estado de resultado y código de salida.
test.case.retry.count Contador {test} Pruebas programadas para un nuevo intento mediante la extensión de reintentos.

Configuración de entorno

Variable del entorno Predeterminado Description
TRACEPARENT, TRACESTATE Unset Contexto de rastreo del W3C para la ejecución principal.
TESTINGPLATFORM_OTEL_CAPTURE_TEST_OUTPUT 1 Adjunta la salida estándar y los errores capturados a los intervalos de prueba. Establézcalo en 0 cuando la salida pueda contener secretos.
TESTINGPLATFORM_OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT 8192 Establece los caracteres máximos retenidos para un atributo de cadena.
TESTINGPLATFORM_OTEL_EMIT_LEGACY_ATTRIBUTES 1 Emite nombres de atributos e instrumentos heredados junto con los nombres según las convenciones semánticas.
OTEL_SDK_DISABLED Unset Establézcalo en true para deshabilitar el SDK de OpenTelemetry.
OTEL_SERVICE_NAME Unset Invalida el nombre del servicio.
OTEL_EXPORTER_OTLP_ENDPOINT Unset Establece el punto de conexión de OTLP.
OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER Unset Selecciona exportadores de trazas y métricas.