OpenTelemetry

Esta funcionalidade requer o pacote Microsoft.Testing.Extensions.OpenTelemetry NuGet.

Esta extensão integra OpenTelemetry com Microsoft. Testing.Platform (MTP), permitindo que testes emitam traços e métricas através do SDK padrão OpenTelemetry.

Observação

Esta extensão está disponível em MTP a partir da versão 2.1.0.

Importante

A partir do MTP 2.4.0, a extensão OpenTelemetry segue a versão de lançamento do MTP e os seus pontos de entrada públicos deixaram de ser experimentais.

Escolha a propriedade do fornecedor

Escolha se o MTP ou a sua aplicação são os proprietários dos fornecedores OpenTelemetry.

Utilize fornecedores detidos pelo MTP

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

builder.AddOpenTelemetryProviderFromEnvironment();

O método só adiciona instrumentação quando configuras um exportador ou passes um callback de configuração, por isso podes deixar o registo na aplicação quando alguns ambientes não exportam telemetria.

Utilize fornecedores próprios da aplicação

A partir da pré-visualização do MTP 2.5, chame AddTestingPlatformDiagnostics quando a sua aplicação já configurar o OpenTelemetry através de Aspire ServiceDefaults, Microsoft.Extensions.Hosting, ou outro ponto de composição. Este método ativa a origem de atividade e o medidor Microsoft.Testing.Platform sem criar, esvaziar nem eliminar um TracerProvider ou MeterProvider.

Subscreva o fornecedor pertencente à aplicação com AddTestingPlatformInstrumentation nos seus construtores de rastreio e métricas. A aplicação mantém a propriedade dos seus fornecedores, exportadores, identidade de recursos e eliminação.

Para um ponto de entrada alojado gerado pelo MSBuild, consulte Microsoft.Testing.Extensions.Hosting, defina TestingPlatformHostFactory como o método de fábrica do anfitrião e defina:

<TestingPlatformOpenTelemetryMode>HostOwned</TestingPlatformOpenTelemetryMode>

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

API

AddTestingPlatformDiagnostics

Ativa a fonte de atividade e o medidor do MTP para ouvintes detidos pela aplicação ou provedores OpenTelemetry, sem transferir a propriedade do provedor para o MTP.

AddOpenTelemetryProvider

Regista o fornecedor OpenTelemetry em ITestApplicationBuilder. Aceita dois callbacks opcionais:

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

AddTestingPlatformInstrumentation

Chame TracerProviderBuilder ou MeterProviderBuilder para subscrever à fonte de atividade e ao contador incorporados Microsoft.Testing.Platform.

AddTestingPlatformResource

Chame ResourceBuilder para adicionar atributos de assembly de teste, host, sistema operativo e ambiente de execução. O detetor também identifica informações sobre o fornecedor de CI, pipeline, branch e commit para GitHub Actions, Azure Pipelines, GitLab CI e Jenkins.

Assistentes de recursos especializados

Para um fornecedor detido pela aplicação, chame AddTestingPlatformTestResource para adicionar uma identidade específica para testes e AddTestingPlatformCIResource para adicionar a proveniência de CI e do controlo de origem. Estes assistentes específicos não substituem os atributos service.*, process.*, host.* ou os.* da aplicação.

AddOpenTelemetryProviderFromEnvironment

Regista o rastreio, as métricas, a deteção de recursos e um exportador OTLP a partir das variáveis de ambiente padrão do OpenTelemetry. OTEL_SDK_DISABLED=true Desativa a integração. Configurar OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER, ou OTEL_EXPORTER_OTLP_ENDPOINT para ativar a exportação.

Fonte de atividade e medidor

A extensão emite telemetria embaixo:

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

Convenções semânticas

O MTP emite atributos padrão de teste OpenTelemetry e código onde 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 falhados definem o estado do span para Error e adicionam um exception evento.

O MTP estende as convenções com estados de resultado adicionais (skipped, error, timeout, cancelled, e unknown) e atributos de teste para conceitos que o OpenTelemetry não define. Para preservar os painéis existentes, os nomes antigos de atributos e instrumentos continuam ativados por predefinição.

Quando o processo de arranque fornece TRACEPARENT e TRACESTATE, o MTP associa a execução de teste a esse rastreio, em vez de iniciar um rastreio raiz não relacionado.

Spans de execução do MSTest

A partir do MSTest 4.5 e da pré-visualização do MTP 2.5, as execuções nativas do MSTest utilizam uma atividade canónica detida pelo MTP para cada execução de teste. O MSTest define a atividade como atual enquanto executa o construtor de teste, a inicialização, o método de teste, a limpeza e o código personalizado TestMethodAttribute. Atividades instrumentadas HttpClientautomaticamente, SQL, Entity Framework, WCF e personalizadas tornam-se assim filhos da atividade de teste.

O MTP adiciona o resultado final, a informação temporal, a saída e os artefactos à mesma atividade e pára-a à hora de fim da execução registada pelo MSTest. Este comportamento evita a duplicação de estruturas e intervalos de resultados e impede que o processamento assíncrono de resultados aumente a duração do teste.

Os frameworks de teste que não utilizam a API de execução canónica mantêm a topologia de compatibilidade: a atividade de execução do framework e a atividade de resultado MTP mantêm-se irmãs, e a atividade de resultado liga-se à atividade que estava em andamento quando o framework publicou a atualização em andamento.

Métricas emitidas

Instrumento Tipo Unidade Description
test.case.duration Histogram s Duração do teste, agrupada por estado do resultado e conjunto.
test.case.result.count Counter {test} Testes concluídos, agrupados por estado dos resultados e conjunto de testes.
test.case.active UpDownCounter {test} Testes que estão a decorrer atualmente.
test.run.duration Histogram s Duração da corrida, agrupada por estado do resultado e código de saída.
test.case.retry.count Counter {test} Testes agendados para uma nova tentativa pela extensão de nova tentativa.

Configuração do ambiente

Variável de ambiente Predefinição Description
TRACEPARENT, TRACESTATE Não definido Contexto de rastreio 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. Definido para 0 quando a saída pode conter segredos.
TESTINGPLATFORM_OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT 8192 Define o número máximo de caracteres retidos para um atributo de string.
TESTINGPLATFORM_OTEL_EMIT_LEGACY_ATTRIBUTES 1 Emite nomes antigos de atributos e de instrumentos juntamente com nomes de convenções semânticas.
OTEL_SDK_DISABLED Não definido Defina como true para desativar o SDK do OpenTelemetry.
OTEL_SERVICE_NAME Não definido Substitui o nome do serviço.
OTEL_EXPORTER_OTLP_ENDPOINT Não definido Define o endpoint OTLP.
OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER Não definido Seleciona exportadores de rastreio e de métricas.