此功能需要 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 |
未设置 | 选择追踪和指标导出器。 |