OpenTelemetry

Fitur ini memerlukan paket NuGet Microsoft.Testing.Extensions.OpenTelemetry .

Ekstensi ini mengintegrasikan OpenTelemetry dengan Microsoft. Testing.Platform (MTP), memungkinkan pengujian dijalankan untuk memancarkan jejak dan metrik melalui OpenTelemetry SDK standar.

Nota

Ekstensi ini tersedia di MTP yang dimulai dengan versi 2.1.0.

Penting

Dimulai dengan MTP 2.4.0, ekstensi OpenTelemetry mengikuti versi rilis MTP dan titik masuk publiknya tidak lagi eksperimental.

Pilih kepemilikan penyedia

Pilih apakah MTP atau aplikasi Anda memiliki penyedia OpenTelemetry.

Gunakan penyedia milik MTP

Nonaktifkan titik masuk yang dihasilkan secara otomatis (<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>) dan panggil AddOpenTelemetryProvider dalam metode Anda 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();

Untuk mengonfigurasi instrumentasi, atribut sumber daya, dan pengekspor OTLP berdasarkan variabel lingkungan standar OTEL_*, panggil:

builder.AddOpenTelemetryProviderFromEnvironment();

Metode ini menambahkan instrumentasi hanya saat Anda mengonfigurasi pengekspor atau meneruskan panggilan balik konfigurasi, sehingga Anda dapat meninggalkan pendaftaran di aplikasi saat beberapa lingkungan tidak mengekspor telemetri.

Menggunakan penyedia milik aplikasi

Mulai dari versi pratinjau MTP 2.5, panggil AddTestingPlatformDiagnostics jika aplikasi Anda sudah mengonfigurasi OpenTelemetry melalui Aspire ServiceDefaults, Microsoft.Extensions.Hosting, atau composition root lainnya. Metode ini mengaktifkan sumber aktivitas dan meter Microsoft.Testing.Platform tanpa membuat, mengosongkan, atau membuang TracerProvider atau MeterProvider.

Daftarkan penyedia yang dimiliki aplikasi dengan AddTestingPlatformInstrumentation pada builder pelacakan dan metriknya. Aplikasi ini mempertahankan kepemilikan penyedia, pengekspor, identitas sumber daya, dan pembuangannya.

Untuk titik entri yang di-host yang dihasilkan oleh MSBuild, sertakan referensi ke Microsoft.Testing.Extensions.Hosting, atur TestingPlatformHostFactory ke metode pabrik host, lalu atur:

<TestingPlatformOpenTelemetryMode>HostOwned</TestingPlatformOpenTelemetryMode>

HostOwned hanya memanggil AddTestingPlatformDiagnostics; ini tidak membuat penyedia atau mengganti identitas resource host. Untuk siklus hidup host dan persyaratan pabrik, lihat Integrasi host.

API

AddTestingPlatformDiagnostics

Mengaktifkan sumber aktivitas dan meter MTP untuk listener atau penyedia OpenTelemetry yang dimiliki aplikasi tanpa mengalihkan kepemilikan penyedia ke MTP.

AddOpenTelemetryProvider

Mendaftarkan penyedia OpenTelemetry di ITestApplicationBuilder. Menerima dua panggilan balik opsional:

  • withTracing: mengonfigurasi TracerProviderBuilder untuk pelacakan terdistribusi.
  • withMetrics: mengonfigurasi MeterProviderBuilder untuk pengumpulan metrik.

AddTestingPlatformInstrumentation

Panggil TracerProviderBuilder atau MeterProviderBuilder untuk berlangganan sumber aktivitas bawaan dan meteran Microsoft.Testing.Platform.

AddTestingPlatformResource

Panggil ResourceBuilder untuk menambahkan assembly pengujian, host, sistem operasi, dan atribut runtime. Detektor juga mengidentifikasi informasi penyedia CI, alur, cabang, dan penerapan untuk GitHub Actions, Azure Pipelines, GitLab CI, dan Jenkins.

Pembantu sumber daya yang berfokus

Untuk penyedia milik aplikasi, panggil AddTestingPlatformTestResource untuk menambahkan identitas khusus pengujian dan AddTestingPlatformCIResource untuk menambahkan CI dan bukti kontrol sumber. Helper yang terfokus ini tidak menggantikan atribut process.*, service.*, os.*, atau host.* yang dimiliki aplikasi.

AddOpenTelemetryProviderFromEnvironment

Mendaftarkan pelacakan, metrik, deteksi sumber daya, dan eksportir OTLP dari variabel lingkungan OpenTelemetry standar. OTEL_SDK_DISABLED=true menonaktifkan integrasi. Konfigurasikan OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER, atau OTEL_EXPORTER_OTLP_ENDPOINT untuk mengaktifkan ekspor.

Sumber aktivitas dan meteran

Ekstensi memancarkan telemetri melalui:

  • Sumber aktivitas: Microsoft.Testing.Platform
  • Meter: Microsoft.Testing.Platform

Konvensi semantik

MTP menghasilkan atribut pengujian dan kode OpenTelemetry standar jika terdapat konvensi yang sesuai, termasuk test.case.name, test.case.result.status, test.suite.name, code.file.path, code.function.name, code.line.number, code.stacktrace, dan error.type. Tes yang gagal menetapkan status span ke Error dan menambahkan event exception.

MTP memperluas konvensi dengan status hasil tambahan (skipped, error, timeout, cancelled, dan unknown) dan atribut uji untuk konsep yang tidak didefinisikan oleh OpenTelemetry. Untuk mempertahankan dasbor yang ada, atribut warisan dan nama instrumen tetap diaktifkan secara default.

Ketika proses peluncuran menyertakan TRACEPARENT dan TRACESTATE, MTP menempatkan proses uji dalam trace tersebut alih-alih memulai trace root yang tidak terkait.

Rentang waktu eksekusi MSTest

Mulai MSTest 4.5 dan pratinjau MTP 2.5, eksekusi MSTest native menggunakan satu aktivitas kanonis yang dimiliki MTP untuk setiap eksekusi pengujian. MSTest membuat aktivitas terkini saat menjalankan konstruktor pengujian, inisialisasi, metode pengujian, pembersihan, dan kode kustom TestMethodAttribute . HttpClient yang diinstrumentasi secara otomatis, SQL, Entity Framework, WCF, dan aktivitas kustom dengan demikian menjadi aktivitas turunan dari aktivitas pengujian.

MTP menambahkan hasil akhir, waktu, output, dan artefak ke aktivitas yang sama dan menghentikannya pada waktu akhir eksekusi yang direkam oleh MSTest. Perilaku ini menghindari kerangka kerja duplikat dan rentang hasil dan mencegah pemrosesan hasil asinkron meningkatkan durasi pengujian.

Kerangka kerja pengujian yang tidak menggunakan API eksekusi kanonis mempertahankan topologi kompatibilitas: aktivitas eksekusi kerangka kerja dan aktivitas hasil MTP tetap bersaudara, dan aktivitas hasil ditautkan ke aktivitas yang saat ini ketika kerangka kerja menerbitkan pembaruan yang sedang berlangsung.

Metrik yang dihasilkan

Instrumen Type Unit Description
test.case.duration Histogram s Durasi pengujian, dikelompokkan berdasarkan status hasil dan suite pengujian.
test.case.result.count Counter {test} Pengujian yang selesai, dikelompokkan berdasarkan status hasil dan suite pengujian.
test.case.active UpDownCounter {test} Pengujian yang saat ini sedang berjalan.
test.run.duration Histogram s Durasi proses, dikelompokkan berdasarkan status hasil dan kode keluar.
test.case.retry.count Counter {test} Tes yang dijadwalkan untuk dicoba lagi oleh ekstensi retry.

Konfigurasi lingkungan

Variabel Lingkungan Default Description
TRACEPARENT, TRACESTATE Menghapus pengaturan Konteks pelacakan W3C untuk eksekusi induk.
TESTINGPLATFORM_OTEL_CAPTURE_TEST_OUTPUT 1 Melampirkan keluaran standar dan galat standar yang ditangkap ke span pengujian. Atur ke 0 kapan output mungkin berisi rahasia.
TESTINGPLATFORM_OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT 8192 Mengatur karakter maksimum yang dipertahankan untuk atribut string.
TESTINGPLATFORM_OTEL_EMIT_LEGACY_ATTRIBUTES 1 Memancarkan atribut warisan dan nama instrumen bersama nama konvensi semantik.
OTEL_SDK_DISABLED Menghapus pengaturan Atur ke true untuk menonaktifkan OpenTelemetry SDK.
OTEL_SERVICE_NAME Menghapus pengaturan Mengganti nama layanan.
OTEL_EXPORTER_OTLP_ENDPOINT Menghapus pengaturan Mengatur titik akhir OTLP.
OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER Menghapus pengaturan Memilih pelacakan dan pengekspor metrik.