OpenTelemetry Test Utilities

0.62b0 · active · verified Sat Apr 11

The `opentelemetry-test-utils` library provides common utilities and base classes designed to simplify unit testing of OpenTelemetry Python components. This includes helpers for capturing and asserting telemetry data (traces, metrics, logs) within a test environment. It is part of the larger OpenTelemetry Python project, currently at version 0.62b0, with new beta releases typically accompanying major `opentelemetry-python` releases.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to use `OTELTestBase` to set up an OpenTelemetry `TracerProvider` with an `InMemorySpanExporter` for testing. It includes a basic test case that creates a span, adds attributes and events, and then asserts the properties of the captured span. `OTELTestBase` handles much of the boilerplate for test cleanup.

import unittest
from opentelemetry import trace
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor, InMemorySpanExporter
from opentelemetry.test_utils import OTELTestBase

class MyInstrumentationTest(OTELTestBase):
    def setUp(self):
        super().setUp()
        # Configure a tracer provider with an in-memory exporter for testing
        self.exporter = InMemorySpanExporter()
        self.span_processor = SimpleSpanProcessor(self.exporter)
        self.tracer_provider = TracerProvider(resource=Resource.create({"service.name": "test-service"}))
        self.tracer_provider.add_span_processor(self.span_processor)
        trace.set_tracer_provider(self.tracer_provider)
        self.tracer = trace.get_tracer(__name__)

    def tearDown(self):
        trace.set_tracer_provider(TracerProvider()) # Reset to default NoOpTracerProvider
        self.span_processor.shutdown()
        super().tearDown()

    def test_basic_span_creation(self):
        with self.tracer.start_as_current_span("test-span") as span:
            span.set_attribute("key", "value")
            span.add_event("my-event")

        # Assert that one span was exported
        spans = self.exporter.get_finished_spans()
        self.assertEqual(len(spans), 1)

        # Assert properties of the exported span
        exported_span = spans[0]
        self.assertEqual(exported_span.name, "test-span")
        self.assertEqual(exported_span.attributes["key"], "value")
        self.assertEqual(len(exported_span.events), 1)
        self.assertEqual(exported_span.events[0].name, "my-event")

if __name__ == '__main__':
    unittest.main()

view raw JSON →