OpenTelemetry

Questa funzionalità richiede il pacchetto NuGet Microsoft.Testing.Extensions.OpenTelemetry .

Questa estensione integra OpenTelemetry con Microsoft. Testing.Platform (MTP), che consente alle esecuzioni di test di generare tracce e metriche tramite OpenTelemetry SDK standard.

Annotazioni

Questa estensione è disponibile in MTP a partire dalla versione 2.1.0.

Importante

A partire da MTP 2.4.0, l'estensione OpenTelemetry segue la versione di rilascio MTP e i relativi punti di ingresso pubblici non sono più sperimentali.

Scegli la titolarità del provider

Scegli se MTP o la tua applicazione gestisce i provider OpenTelemetry.

Usare i provider di proprietà di MTP

Disabilitare il punto di ingresso generato automaticamente (<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>) e chiamare AddOpenTelemetryProvider nel Main metodo:

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();

Per configurare la strumentazione, gli attributi della risorsa e un esportatore OTLP a partire dalle variabili d'ambiente standard OTEL_*, chiamare:

builder.AddOpenTelemetryProviderFromEnvironment();

Il metodo aggiunge strumentazione solo quando si configura un utilità di esportazione o si passa un callback di configurazione, quindi è possibile lasciare la registrazione nell'applicazione quando alcuni ambienti non esportano i dati di telemetria.

Usa provider gestiti dall'applicazione

A partire dall'anteprima di MTP 2.5, usa AddTestingPlatformDiagnostics quando l'applicazione configura già OpenTelemetry tramite Aspire ServiceDefaults, Microsoft.Extensions.Hosting, o un'altra composition root. Questo metodo attiva l'origine di attività e il meter Microsoft.Testing.Platform senza creare, svuotare o eliminare un TracerProvider o MeterProvider.

Registrare il provider proprietario dell'applicazione con AddTestingPlatformInstrumentation nei relativi builder di tracce e metriche. L'applicazione conserva la proprietà dei propri provider, degli esportatori, dell'identità delle risorse e del rilascio.

Per un punto di ingresso ospitato generato da MSBuild, fare riferimento a Microsoft.Testing.Extensions.Hosting, impostare TestingPlatformHostFactory sul metodo factory dell'host e impostare:

<TestingPlatformOpenTelemetryMode>HostOwned</TestingPlatformOpenTelemetryMode>

HostOwned chiama solo AddTestingPlatformDiagnostics; non crea provider o sostituisce l'identità della risorsa dell'host. Per i requisiti relativi al ciclo di vita dell'host e di fabbrica, vedere Integrazione host.

API

AddTestingPlatformDiagnostics

Attiva l'origine e il contatore dell'attività di MTP per listener di proprietà dell'applicazione o provider OpenTelemetry senza trasferire la proprietà del provider a MTP.

AddOpenTelemetryProvider

Registra il provider OpenTelemetry su ITestApplicationBuilder. Accetta due i callback facoltativi:

  • withTracing: configura TracerProviderBuilder per la traccia distribuita.
  • withMetrics: configura MeterProviderBuilder per la raccolta di metriche.

AddTestingPlatformInstrumentation

Chiamare TracerProviderBuilder o MeterProviderBuilder per iscriversi all'origine e al contatore dell'attività predefiniti Microsoft.Testing.Platform.

AddTestingPlatformResource

Usare ResourceBuilder per aggiungere gli attributi dell'assembly di test, dell'host, del sistema operativo e del runtime. Il rilevatore identifica anche le informazioni sul provider CI, sulla pipeline, sul branch e sul commit per GitHub Actions, Azure Pipelines, GitLab CI e Jenkins.

Strumenti di supporto per risorse mirate

Per un provider gestito dall'applicazione, usare AddTestingPlatformTestResource per aggiungere un'identità specifica per i test e AddTestingPlatformCIResource per aggiungere la CI e le informazioni di provenienza del controllo del codice sorgente. Questi helper mirati non sostituiscono gli attributi host.*, os.*, process.* o service.* di proprietà dell'applicazione.

AddOpenTelemetryProviderFromEnvironment

Registra il tracciamento, le metriche, il rilevamento delle risorse e un esportatore OTLP dalle variabili d'ambiente OpenTelemetry standard. OTEL_SDK_DISABLED=true disabilita l'integrazione. Configurare OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTERo OTEL_EXPORTER_OTLP_ENDPOINT per attivare l'esportazione.

Origine e contatore dell'attività

L'estensione trasmette dati di telemetria in:

  • Origine attività: Microsoft.Testing.Platform
  • Metro: Microsoft.Testing.Platform

Convenzioni semantiche

MTP genera attributi standard di test e codice OpenTelemetry in cui esiste una convenzione, tra cui test.case.name, test.case.result.status, code.function.nametest.suite.name, code.file.pathcode.line.number, , code.stacktrace, e error.type. I test non superati impostano lo stato dell'intervallo su Error e aggiungono un exception evento.

MTP estende le convenzioni con stati di risultato aggiuntivi (skipped, error, cancelledtimeout, e unknown) e attributi di test per i concetti che OpenTelemetry non definisce. Per mantenere i dashboard esistenti, i nomi degli attributi e degli strumenti legacy rimangono abilitati per impostazione predefinita.

Quando il processo di avvio fornisce TRACEPARENT e TRACESTATE, MTP inserisce l'esecuzione del test in tale traccia anziché avviare una traccia radice non correlata.

Intervalli di esecuzione di MSTest

A partire dall'anteprima di MSTest 4.5 e MTP 2.5, le esecuzioni MSTest native usano un'attività di proprietà MTP canonica per ogni esecuzione di test. MSTest rende l'attività corrente durante l'esecuzione del costruttore di test, dell'inizializzazione, del metodo di test, della pulizia e del codice personalizzato TestMethodAttribute . Le attività HttpClient strumentate automaticamente, SQL, Entity Framework, WCF e le attività personalizzate diventano attività figlie dell'attività di test.

MTP aggiunge il risultato finale, la tempistica, l'output e gli artefatti alla stessa attività e la interrompe al momento di fine dell'esecuzione registrato da MSTest. Questo comportamento evita intervalli temporali duplicati del framework e dei risultati e impedisce che l'elaborazione asincrona dei risultati aumenti artificialmente la durata del test.

I framework di test che non utilizzano l'API di esecuzione canonica mantengono la topologia di compatibilità: l'attività di esecuzione del framework e l'attività di risultato rimangono elementi fratelli e l'attività di risultato si collega all'attività che era corrente nel momento in cui il framework ha pubblicato l'aggiornamento sullo stato di avanzamento.

Metriche emesse

Strumento Tipo Unità Description
test.case.duration Istogramma s Durata del test, raggruppata per stato del risultato e suite.
test.case.result.count Contatore {test} Test completati, raggruppati per stato del risultato e suite.
test.case.active UpDownCounter {test} Test attualmente in esecuzione.
test.run.duration Istogramma s Durata dell'esecuzione, raggruppata in base allo stato dei risultati e al codice di uscita.
test.case.retry.count Contatore {test} Test programmati per un nuovo tentativo dall'estensione di ripetizione.

Configurazione dell'ambiente

Variabile di ambiente Predefinito Description
TRACEPARENT, TRACESTATE Non impostato Contesto di traccia W3C per l'esecuzione principale.
TESTINGPLATFORM_OTEL_CAPTURE_TEST_OUTPUT 1 Allega l'output standard acquisito e l'errore per testare gli intervalli. Imposta su 0 quando l'output potrebbe contenere informazioni sensibili.
TESTINGPLATFORM_OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT 8192 Imposta i caratteri massimi conservati per un attributo stringa.
TESTINGPLATFORM_OTEL_EMIT_LEGACY_ATTRIBUTES 1 Emette nomi di attributi legacy e nomi degli strumenti insieme ai nomi della convenzione semantica.
OTEL_SDK_DISABLED Non impostato Impostare il valore su true per disabilitare l'SDK OpenTelemetry.
OTEL_SERVICE_NAME Non impostato Sovrascrive il nome del servizio.
OTEL_EXPORTER_OTLP_ENDPOINT Non impostato Imposta l'endpoint OTLP.
OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER Non impostato Seleziona gli esportatori di tracce e metriche.