OpenTelemetry

此功能需要 Microsoft.Testing.Extensions.OpenTelemetry NuGet 包。

此扩展将 OpenTelemetry 与 Microsoft.Testing.Platform(MTP)集成,允许测试运行通过标准 OpenTelemetry SDK 发出跟踪和指标。

注释

从版本 2.1.0 开始,MTP 中提供了此扩展。

重要

从 MTP 2.4.0 开始,OpenTelemetry 扩展遵循 MTP 版本,其公共入口点不再具有实验性。

Registration

注释

此扩展不支持自动注册。 必须通过禁用自动生成的入口点(<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();

要通过标准OTEL_*环境变量配置插桩、资源属性和 OTLP 导出器,请调用:

builder.AddOpenTelemetryProviderFromEnvironment();

该方法仅在您配置导出器或传入配置回调时才会添加检测功能,因此即使某些环境不导出遥测数据,您也可以在应用程序中保留这段注册代码。

API

AddOpenTelemetryProvider

将 OpenTelemetry 提供程序注册到 ITestApplicationBuilder 上。 接受两个可选回调:

  • withTracing:配置 TracerProviderBuilder 分布式跟踪。
  • withMetrics:配置 MeterProviderBuilder 用于指标收集。

AddTestingPlatformInstrumentation

调用TracerProviderBuilder或MeterProviderBuilder来订阅内置的Microsoft.Testing.Platform活动源和计量器。

AddTestingPlatformResource

ResourceBuilder调用以添加测试程序集、主机、操作系统和运行时属性。 检测器还标识了用于GitHub Actions、Azure Pipelines、GitLab CI 和 Jenkins 的 CI 提供程序、管道、分支和提交信息。

AddOpenTelemetryProviderFromEnvironment

通过标准 OpenTelemetry 环境变量注册跟踪、指标、资源检测和 OTLP 导出器。 OTEL_SDK_DISABLED=true 禁用集成。 配置OTEL_TRACES_EXPORTER或OTEL_METRICS_EXPORTEROTEL_EXPORTER_OTLP_ENDPOINT激活导出。

活动来源和测量器

该扩展会在以下情况下发出遥测:

  • 活动源: Microsoft.Testing.Platform
  • 米: Microsoft.Testing.Platform

语义约定

MTP 会发出标准的 OpenTelemetry 测试属性和代码属性;在有相应约定的情况下,这些属性包括 test.case.name、test.suite.name、code.function.name、code.file.path、code.line.number、code.stacktrace、error.type 和 test.case.result.status。 失败的测试会将 Span 状态设为 Error,并添加一个 exception 事件。

MTP 在这些约定的基础上进行了扩展,新增了额外的结果状态(skipped、error、cancelled、timeout 和 unknown),以及用于 OpenTelemetry 未定义概念的测试属性。 为保留现有仪表板,旧版属性名称和指标名称默认保持启用。

当启动进程提供了 TRACEPARENT 和 TRACESTATE 时,MTP 会将此次测试运行归入该跟踪之下,而不是启动一个不相关的根跟踪。

输出的指标

仪器 类型 单位 说明
test.case.duration 直方图 s 测试持续时间,按结果状态和套件分组。
test.case.result.count Counter {test} 已完成的测试,按结果状态和套件分组。
test.case.active UpDownCounter {test} 当前正在运行的测试。
test.run.duration 直方图 s 运行持续时间,按结果状态和退出代码分组。
test.case.retry.count Counter {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 禁用 OpenTelemetry SDK。
OTEL_SERVICE_NAME 未设置 覆盖服务名称。
OTEL_EXPORTER_OTLP_ENDPOINT 未设置 设置 OTLP 终结点。
OTEL_TRACES_EXPORTER、OTEL_METRICS_EXPORTER 未设置 选择追踪和指标导出器。