此功能需要 Microsoft.Testing.Extensions.OpenTelemetry NuGet 包。
此扩展将 OpenTelemetry 与 Microsoft.Testing.Platform(MTP)集成,允许测试运行通过标准 OpenTelemetry SDK 发出跟踪和指标。
注释
从版本 2.1.0 开始,MTP 中提供了此扩展。
重要
从 MTP 2.4.0 开始,OpenTelemetry 扩展遵循 MTP 版本,其公共入口点不再具有实验性。
选择提供方归属
选择由 MTP 还是由您的应用程序负责管理 OpenTelemetry 提供程序。
使用 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();
要通过标准OTEL_*环境变量配置插桩、资源属性和 OTLP 导出器,请调用:
builder.AddOpenTelemetryProviderFromEnvironment();
该方法仅在您配置导出器或传入配置回调时才会添加检测功能,因此即使某些环境不导出遥测数据,您也可以在应用程序中保留这段注册代码。
使用应用程序拥有的提供程序
从 MTP 2.5 预览版开始,当应用程序已通过 Aspire ServiceDefaults、AddTestingPlatformDiagnostics 或其他组合根配置 OpenTelemetry 时,请调用 Microsoft.Extensions.Hosting。 此方法会激活 Microsoft.Testing.Platform 活动源和计量器,而不会创建、刷新或释放 TracerProvider 或 MeterProvider。
订阅应用程序拥有的提供程序,通过其跟踪和指标生成器上的 AddTestingPlatformInstrumentation。 应用程序保留其提供程序、导出者、资源标识和处置的所有权。
对于由 MSBuild 生成的托管入口点,请引用 Microsoft.Testing.Extensions.Hosting,将 TestingPlatformHostFactory 设置为主机工厂方法,并设置:
<TestingPlatformOpenTelemetryMode>HostOwned</TestingPlatformOpenTelemetryMode>
HostOwned 仅调用 AddTestingPlatformDiagnostics;它不会创建提供程序,也不会替换主机的资源标识。 有关主机生命周期和工厂要求,请参阅 主机集成。
API
AddTestingPlatformDiagnostics
为由应用程序拥有的侦听器或 OpenTelemetry 提供程序激活 MTP 的活动源和计量器,而无需将提供程序的所有权转移给 MTP。
AddOpenTelemetryProvider
将 OpenTelemetry 提供程序注册到 ITestApplicationBuilder 上。 接受两个可选回调:
-
withTracing:配置TracerProviderBuilder分布式跟踪。 -
withMetrics:配置MeterProviderBuilder用于指标收集。
AddTestingPlatformInstrumentation
调用TracerProviderBuilder或MeterProviderBuilder来订阅内置的Microsoft.Testing.Platform活动源和计量器。
AddTestingPlatformResource
ResourceBuilder调用以添加测试程序集、主机、操作系统和运行时属性。 检测器还标识了用于GitHub Actions、Azure Pipelines、GitLab CI 和 Jenkins 的 CI 提供程序、管道、分支和提交信息。
针对性资源帮助程序
对于由应用程序拥有的提供程序,调用 AddTestingPlatformTestResource 以添加测试专用标识,调用 AddTestingPlatformCIResource 以添加 CI 和源代码管理来源信息。 这些专用辅助函数不会替代应用程序自有的 service.*、host.*、os.* 或 process.* 属性。
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 会将此次测试运行归入该跟踪之下,而不是启动一个不相关的根跟踪。
MSTest 执行范围
从 MSTest 4.5 和 MTP 2.5 预览版开始,MSTest 原生运行在每次测试执行时都会使用一个由 MTP 管理的规范活动。 MSTest 在运行测试构造函数、初始化、测试方法、清理和自定义 TestMethodAttribute 代码时使活动保持最新状态。 自动检测 HttpClient、SQL、实体框架、WCF 和自定义活动将成为测试活动的子级。
MTP 将最终结果、时间信息、输出和工件添加到同一活动中,并在 MSTest 记录的执行结束时间将其停止。 此行为可避免重复的框架和结果范围,并防止异步结果处理膨胀测试持续时间。
不使用规范执行 API 的测试框架保留兼容性拓扑:框架执行活动和 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 |
未设置 | 选择追踪和指标导出器。 |