OpenTelemetry

Для этой функции требуется пакет NuGet Microsoft.Testing.Extensions.OpenTelemetry .

Это расширение интегрирует OpenTelemetry с Microsoft.Testing.Platform (MTP), позволяя тестовые прогоны генерировать трассировки и метрики через стандартный SDK OpenTelemetry.

Замечание

Это расширение доступно в MTP начиная с версии 2.1.0.

Это важно

Начиная с MTP 2.4.0 расширение OpenTelemetry следует версии выпуска MTP, а ее общедоступные точки входа больше не экспериментальны.

Выберите принадлежность поставщика

Выберите, кто управляет поставщиками OpenTelemetry: MTP или ваше приложение.

Используйте поставщиков, принадлежащих MTP

Отключите автоматически созданную точку входа (<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>) и вызовите AddOpenTelemetryProvider в методе 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();

Чтобы настроить инструментирование, атрибуты ресурсов и экспортер OTLP из стандартных OTEL_* переменных среды, вызовите:

builder.AddOpenTelemetryProviderFromEnvironment();

Этот метод добавляет инструментирование только при настройке экспортера или обратном вызове конфигурации, поэтому вы можете оставить регистрацию в приложении, если некоторые среды не экспортируют данные телеметрии.

Использование поставщиков, принадлежащих приложению

Начиная с предварительной версии MTP 2.5, вызывайте AddTestingPlatformDiagnostics, если приложение уже настраивает OpenTelemetry через Aspire ServiceDefaults, Microsoft.Extensions.Hosting или другую точку композиции. Этот метод активирует источник активности Microsoft.Testing.Platform и измеритель, не создавая, не сбрасывая и не освобождая MeterProvider или TracerProvider.

Зарегистрируйте поставщика, принадлежащего приложению, с помощью AddTestingPlatformInstrumentation в его построителях трассировки и метрик. Приложение сохраняет контроль над своими поставщиками, экспортёрами, идентификатором ресурса и освобождением ресурсов.

Для размещённой точки входа, созданной MSBuild, укажите ссылку на Microsoft.Testing.Extensions.Hosting, задайте TestingPlatformHostFactory как метод фабрики узла и задайте:

<TestingPlatformOpenTelemetryMode>HostOwned</TestingPlatformOpenTelemetryMode>

HostOwned вызывает только AddTestingPlatformDiagnostics; он не создает провайдеров и не заменяет идентификатор ресурса хоста. Требования к жизненному циклу хоста и фабрики см. в разделе Интеграция хоста.

API

AddTestingPlatformDiagnostics

Активирует источник активности и метр MTP для слушателей, принадлежащих приложению, или провайдеров OpenTelemetry без передачи MTP прав владения провайдером.

AddOpenTelemetryProvider

Регистрируется провайдер OpenTelemetry в ITestApplicationBuilder. Принимает два необязательных обратных вызова:

  • withTracing: настраивает TracerProviderBuilder для распределенной трассировки.
  • withMetrics: настраивает MeterProviderBuilder для сбора метрик.

AddTestingPlatformInstrumentation

Обратитесь к TracerProviderBuilder или MeterProviderBuilder, чтобы подписаться на встроенный источник активности и счетчик Microsoft.Testing.Platform.

AddTestingPlatformResource

Вызовите ResourceBuilder, чтобы добавить атрибуты тестовой сборки, хоста, операционной системы и среды выполнения. Детектор также определяет сведения о поставщике CI, пайплайне, ветке и коммите для GitHub Actions, Azure Pipelines, GitLab CI и Jenkins.

Специализированные вспомогательные ресурсы

Для поставщика приложения вызовите AddTestingPlatformTestResource, чтобы добавить идентификатор, специфичный для теста, и AddTestingPlatformCIResource, чтобы добавить данные о происхождении из CI и системы контроля версий. Эти специализированные вспомогательные функции не заменяют атрибуты service.*, host.*, os.* или process.*, принадлежащие приложению.

AddOpenTelemetryProviderFromEnvironment

Регистрирует трассировку, метрики, обнаружение ресурсов и экспортер OTLP из стандартных переменных среды OpenTelemetry. OTEL_SDK_DISABLED=true отключает интеграцию. Настройте OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER или OTEL_EXPORTER_OTLP_ENDPOINT, чтобы активировать экспорт.

Источник действия и счетчик

Расширение выдает данные телеметрии в следующих условиях:

  • Источник действия: Microsoft.Testing.Platform
  • Метр: Microsoft.Testing.Platform

Семантические соглашения

MTP генерирует стандартные атрибуты тестирования и кода OpenTelemetry там, где существует соответствующее соглашение, включая test.case.name, test.case.result.status, test.suite.name, code.line.number, code.file.path, code.function.name, code.stacktrace и error.type. Неудачные тесты задают состояние Error диапазона и добавляют exception событие.

MTP расширяет соглашения, добавляя дополнительные состояния результатов (skipped, error, timeout, cancelled и unknown) и тестовые атрибуты для концепций, которые OpenTelemetry не определяет. Чтобы сохранить существующие панели мониторинга, устаревшие имена атрибутов и инструментов остаются включенными по умолчанию.

Когда процесс запуска передаёт TRACEPARENT и TRACESTATE, MTP помещает тестовый запуск в эту трассировку вместо запуска новой, не связанной с ней корневой трассировки.

Диапазоны выполнения MSTest

Начиная с MSTest 4.5 и предварительной версии MTP 2.5, собственные запуски MSTest используют одну каноническую операцию, управляемую MTP, для каждого запуска теста. MSTest делает действие текущим при запуске конструктора теста, инициализации, метода тестирования, очистки и пользовательского TestMethodAttribute кода. Таким образом, автоматически инструментированные HttpClient, SQL, Entity Framework, WCF и пользовательские действия становятся дочерними объектами тестового действия.

MTP добавляет окончательный результат, сведения о времени выполнения, вывод и артефакты в ту же операцию и завершает её в момент окончания выполнения, зафиксированный MSTest. Такое поведение позволяет избежать дублирования интервалов фреймворка и результатов и предотвращает искусственное увеличение длительности теста из-за асинхронной обработки результатов.

Тестовые фреймворки, которые не используют канонический API выполнения, сохраняют топологию совместимости: активность выполнения фреймворка и активность результата MTP остаются на одном уровне, а активность результата ссылается на активность, которая была текущей, когда фреймворк опубликовал промежуточное обновление о ходе выполнения.

Сгенерированные метрики

Инструмент Тип Единица Описание
test.case.duration Гистограмма s Длительность теста, сгруппированная по статусу результата и набору тестов.
test.case.result.count Счетчик {test} Завершенные тесты, сгруппированные по статусу результата и набору тестов.
test.case.active UpDownCounter {test} Тесты, запущенные в настоящее время.
test.run.duration Гистограмма s Длительность выполнения, сгруппированная по состоянию результата и коду выхода.
test.case.retry.count Счетчик {test} Тесты, запланированные расширением повторных попыток для ещё одной попытки.

Конфигурация среды

Переменная среды По умолчанию Описание
TRACEPARENT, TRACESTATE Сбросить Контекст трассировки W3C для родительского запуска.
TESTINGPLATFORM_OTEL_CAPTURE_TEST_OUTPUT 1 Присоединяет стандартные выходные данные и ошибки для тестирования диапазонов. Установите значение 0, если выходные данные могут содержать секреты.
TESTINGPLATFORM_OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT 8192 Задает максимальные символы, сохраненные для строкового атрибута.
TESTINGPLATFORM_OTEL_EMIT_LEGACY_ATTRIBUTES 1 Выводит устаревшие имена атрибутов и инструментов вместе с именами, соответствующими семантическим соглашениям.
OTEL_SDK_DISABLED Сбросить Установите значение true, чтобы отключить пакет SDK OpenTelemetry.
OTEL_SERVICE_NAME Сбросить Переопределяет имя службы.
OTEL_EXPORTER_OTLP_ENDPOINT Сбросить Задает конечную точку OTLP.
OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER Сбросить Выбирает экспортеров трассировки и метрик.