OpenTelemetry

Esse recurso requer o pacote NuGet Microsoft.Testing.Extensions.OpenTelemetry .

Essa extensão integra OpenTelemetry com Microsoft. Testing.Platform (MTP), permitindo execuções de teste para emitir rastreamentos e métricas por meio do SDK do OpenTelemetry padrão.

Observação

Essa extensão está disponível no MTP a partir da versão 2.1.0.

Importante

A partir da versão 2.4.0 do MTP, a extensão OpenTelemetry passa a seguir a versão de lançamento do MTP, e seus pontos de entrada públicos deixam de ser experimentais.

Escolher a propriedade do provedor

Escolha se o MTP ou seu aplicativo possui os provedores OpenTelemetry.

Use provedores de propriedade da MTP

Desative o ponto de entrada gerado automaticamente (<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>) e chame AddOpenTelemetryProvider em seu 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 a instrumentação, os atributos de recurso e um exportador OTLP a partir de variáveis de ambiente padrão OTEL_*, chame:

builder.AddOpenTelemetryProviderFromEnvironment();

O método adiciona instrumentação somente quando você configura um exportador ou passa um callback de configuração, de modo que você pode manter o registro no aplicativo mesmo quando alguns ambientes não exportam telemetria.

Use provedores pertencentes ao aplicativo

A partir da versão prévia do MTP 2.5, chame AddTestingPlatformDiagnostics quando seu aplicativo já configurar o OpenTelemetry por meio de Aspire ServiceDefaults, Microsoft.Extensions.Hosting ou outra raiz de composição. Esse método ativa a Microsoft.Testing.Platform fonte de atividade e o medidor sem criar, esvaziar ou descartar um TracerProvider ou MeterProvider.

Inscreva o provedor de propriedade do aplicativo com AddTestingPlatformInstrumentation em seus construtores de rastreamento e métricas. O aplicativo mantém o controle sobre seus provedores, exportadores, a identidade do recurso e sua liberação.

Para um ponto de entrada hospedado gerado pelo MSBuild, referencie Microsoft.Testing.Extensions.Hosting, defina TestingPlatformHostFactory como o método de fábrica do host e defina:

<TestingPlatformOpenTelemetryMode>HostOwned</TestingPlatformOpenTelemetryMode>

HostOwned apenas chama AddTestingPlatformDiagnostics; não cria provedores nem substitui a identidade do recurso do host. Para requisitos do ciclo de vida e de fábrica do host, consulte integração de host.

API

AddTestingPlatformDiagnostics

Ativa a fonte de atividade e o medidor de métricas do MTP para ouvintes pertencentes ao aplicativo ou provedores do OpenTelemetry, sem transferir a propriedade do provedor ao MTP.

AddOpenTelemetryProvider

Registra o provedor OpenTelemetry em ITestApplicationBuilder. Aceita dois retornos de chamada opcionais:

  • withTracing: configura o TracerProviderBuilder para rastreamento distribuído.
  • withMetrics: configura a MeterProviderBuilder para a coleta de métricas.

AddTestingPlatformInstrumentation

Use TracerProviderBuilder ou MeterProviderBuilderpara assinar a origem de atividades e o medidor integrados Microsoft.Testing.Platform.

AddTestingPlatformResource

Use ResourceBuilder para adicionar atributos do assembly de teste, do host, do sistema operacional e do tempo de execução. O detector também identifica informações sobre o provedor de CI, o pipeline, a branch e o commit para GitHub Actions, Azure Pipelines, GitLab CI e Jenkins.

Auxiliares de recursos focados

Para um provedor pertencente ao aplicativo, chame AddTestingPlatformTestResource para adicionar identidade específica para teste e AddTestingPlatformCIResource para adicionar proveniência do CI e do controle de código-fonte. Esses auxiliares específicos não substituem os atributos process.*, service.*, host.* ou os.* pertencentes ao aplicativo.

AddOpenTelemetryProviderFromEnvironment

Registra rastreamento, métricas, detecção de recursos e um exportador OTLP com base nas variáveis de ambiente padrão do OpenTelemetry. OTEL_SDK_DISABLED=true desabilita a integração. Configure OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER ou OTEL_EXPORTER_OTLP_ENDPOINT para ativar a exportação.

Origem e métricas de atividade

A extensão emite telemetria em:

  • Origem da atividade: Microsoft.Testing.Platform
  • Medidor: Microsoft.Testing.Platform

Convenções semânticas

O MTP emite atributos padrão de teste e código do OpenTelemetry para os quais existe uma convenção, incluindo test.case.name, test.case.result.status, test.suite.name, code.function.name, code.file.path, code.line.number, code.stacktrace e error.type. Testes com falha definem o status do intervalo como Error e adicionam um evento exception.

O MTP estende as convenções com estados de resultado adicionais (skipped, error, , timeoute cancelled) e unknownatributos de teste para conceitos que o OpenTelemetry não define. Para preservar os painéis existentes, os atributos legados e os nomes de instrumentos permanecem habilitados por padrão.

Quando o processo de inicialização fornece TRACEPARENT e TRACESTATEo MTP coloca a execução de teste sob esse rastreamento em vez de iniciar um rastreamento raiz não relacionado.

Intervalos de execução do MSTest

A partir das versões prévias do MSTest 4.5 e do MTP 2.5, as execuções nativas do MSTest usam uma única atividade canônica controlada pelo MTP para cada execução de teste. O MSTest torna a atividade atual enquanto executa o construtor de teste, a inicialização, o método de teste, a limpeza e o código personalizado TestMethodAttribute. As atividades instrumentadas automaticamente HttpClient, SQL, Entity Framework, WCF e personalizadas tornam-se, portanto, filhas da atividade de teste.

O MTP adiciona o resultado final, o tempo, a saída e os artefatos à mesma atividade e o interrompe na hora de término da execução registrada pelo MSTest. Esse comportamento evita estrutura duplicada e intervalos de resultados e impede que o processamento de resultado assíncrono infla a duração do teste.

As estruturas de teste que não usam a API de execução canônica mantêm a topologia de compatibilidade: a atividade de execução da estrutura e a atividade de resultado do MTP permanecem irmãs, e a atividade de resultado se vincula à atividade que estava ativa quando a estrutura publicou a atualização em andamento.

Métricas emitidas

Instrumento Tipo Unidade Descrição
test.case.duration Histograma s Duração do teste, agrupada por status de resultado e pacote.
test.case.result.count Contador {test} Testes concluídos, agrupados por status de resultado e pacote.
test.case.active UpDownCounter {test} Testes que estão em execução no momento.
test.run.duration Histograma s Duração da execução, agrupada por status de resultado e código de saída.
test.case.retry.count Contador {test} Testes agendados para uma nova tentativa pela extensão de nova tentativa.

Configuração do ambiente

Variável de ambiente Default Descrição
TRACEPARENT, TRACESTATE Desconfigurado Contexto de rastreamento W3C para a execução principal.
TESTINGPLATFORM_OTEL_CAPTURE_TEST_OUTPUT 1 Anexa a saída padrão capturada e o erro aos intervalos de teste. Defina como 0 quando a saída puder conter segredos.
TESTINGPLATFORM_OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT 8192 Define o máximo de caracteres retidos para um atributo de cadeia de caracteres.
TESTINGPLATFORM_OTEL_EMIT_LEGACY_ATTRIBUTES 1 Emite nomes de atributos e instrumentos herdados junto com nomes da convenção semântica.
OTEL_SDK_DISABLED Desconfigurado Defina como true para desabilitar o SDK do OpenTelemetry.
OTEL_SERVICE_NAME Desconfigurado Substitui o nome do serviço.
OTEL_EXPORTER_OTLP_ENDPOINT Desconfigurado Define o ponto de extremidade OTLP.
OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER Desconfigurado Seleciona exportadores de rastros e métricas.