diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py b/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py index d60b169fec..21275366e2 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py +++ b/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py @@ -151,6 +151,9 @@ def matches(self, scope: Scope) -> tuple[Match, Scope]: return super().matches(scope) +SCOPE = "opentelemetry.instrumentation.fastapi" + + class TestBaseFastAPI(TestBase): def _create_app(self): app = self._create_fastapi_app() @@ -454,7 +457,7 @@ def test_instrument_app_with_instrument(self): self.assertIn("GET /foobar", span.name) self.assertEqual( span.instrumentation_scope.name, - "opentelemetry.instrumentation.fastapi", + SCOPE, ) def test_uninstrument_app(self): @@ -525,96 +528,66 @@ def test_fastapi_metrics(self): self._client.get("/foobar") self._client.get("/foobar") self._client.get("/foobar") - metrics_list = self.memory_metrics_reader.get_metrics_data() number_data_point_seen = False histogram_data_point_seen = False - self.assertTrue(len(metrics_list.resource_metrics) == 1) - for resource_metric in metrics_list.resource_metrics: - self.assertTrue(len(resource_metric.scope_metrics) == 1) - for scope_metric in resource_metric.scope_metrics: - self.assertEqual( - scope_metric.scope.name, - "opentelemetry.instrumentation.fastapi", - ) - self.assertTrue(len(scope_metric.metrics) == 3) - for metric in scope_metric.metrics: - self.assertIn(metric.name, _expected_metric_names_old) - data_points = list(metric.data.data_points) - self.assertEqual(len(data_points), 1) - for point in data_points: - if isinstance(point, HistogramDataPoint): - self.assertEqual(point.count, 3) - histogram_data_point_seen = True - if isinstance(point, NumberDataPoint): - number_data_point_seen = True - for attr in point.attributes: - self.assertIn( - attr, _recommended_attrs_old[metric.name] - ) + metrics = self.get_sorted_metrics(SCOPE) + self.assertTrue(len(metrics) == 3) + for metric in metrics: + self.assertIn(metric.name, _expected_metric_names_old) + data_points = list(metric.data.data_points) + self.assertEqual(len(data_points), 1) + for point in data_points: + if isinstance(point, HistogramDataPoint): + self.assertEqual(point.count, 3) + histogram_data_point_seen = True + if isinstance(point, NumberDataPoint): + number_data_point_seen = True + for attr in point.attributes: + self.assertIn(attr, _recommended_attrs_old[metric.name]) self.assertTrue(number_data_point_seen and histogram_data_point_seen) def test_fastapi_metrics_new_semconv(self): self._client.get("/foobar") self._client.get("/foobar") self._client.get("/foobar") - metrics_list = self.memory_metrics_reader.get_metrics_data() number_data_point_seen = False histogram_data_point_seen = False - self.assertTrue(len(metrics_list.resource_metrics) == 1) - for resource_metric in metrics_list.resource_metrics: - self.assertTrue(len(resource_metric.scope_metrics) == 1) - for scope_metric in resource_metric.scope_metrics: - self.assertEqual( - scope_metric.scope.name, - "opentelemetry.instrumentation.fastapi", - ) - self.assertTrue(len(scope_metric.metrics) == 3) - for metric in scope_metric.metrics: - self.assertIn(metric.name, _expected_metric_names_new) - data_points = list(metric.data.data_points) - self.assertEqual(len(data_points), 1) - for point in data_points: - if isinstance(point, HistogramDataPoint): - self.assertEqual(point.count, 3) - histogram_data_point_seen = True - if isinstance(point, NumberDataPoint): - number_data_point_seen = True - for attr in point.attributes: - self.assertIn( - attr, _recommended_attrs_new[metric.name] - ) + metrics = self.get_sorted_metrics(SCOPE) + self.assertTrue(len(metrics) == 3) + for metric in metrics: + self.assertIn(metric.name, _expected_metric_names_new) + data_points = list(metric.data.data_points) + self.assertEqual(len(data_points), 1) + for point in data_points: + if isinstance(point, HistogramDataPoint): + self.assertEqual(point.count, 3) + histogram_data_point_seen = True + if isinstance(point, NumberDataPoint): + number_data_point_seen = True + for attr in point.attributes: + self.assertIn(attr, _recommended_attrs_new[metric.name]) self.assertTrue(number_data_point_seen and histogram_data_point_seen) def test_fastapi_metrics_both_semconv(self): self._client.get("/foobar") self._client.get("/foobar") self._client.get("/foobar") - metrics_list = self.memory_metrics_reader.get_metrics_data() number_data_point_seen = False histogram_data_point_seen = False - self.assertTrue(len(metrics_list.resource_metrics) == 1) - for resource_metric in metrics_list.resource_metrics: - self.assertTrue(len(resource_metric.scope_metrics) == 1) - for scope_metric in resource_metric.scope_metrics: - self.assertEqual( - scope_metric.scope.name, - "opentelemetry.instrumentation.fastapi", - ) - self.assertTrue(len(scope_metric.metrics) == 5) - for metric in scope_metric.metrics: - self.assertIn(metric.name, _expected_metric_names_both) - data_points = list(metric.data.data_points) - self.assertEqual(len(data_points), 1) - for point in data_points: - if isinstance(point, HistogramDataPoint): - self.assertEqual(point.count, 3) - histogram_data_point_seen = True - if isinstance(point, NumberDataPoint): - number_data_point_seen = True - for attr in point.attributes: - self.assertIn( - attr, _recommended_attrs_both[metric.name] - ) + metrics = self.get_sorted_metrics(SCOPE) + self.assertTrue(len(metrics) == 5) + for metric in metrics: + self.assertIn(metric.name, _expected_metric_names_both) + data_points = list(metric.data.data_points) + self.assertEqual(len(data_points), 1) + for point in data_points: + if isinstance(point, HistogramDataPoint): + self.assertEqual(point.count, 3) + histogram_data_point_seen = True + if isinstance(point, NumberDataPoint): + number_data_point_seen = True + for attr in point.attributes: + self.assertIn(attr, _recommended_attrs_both[metric.name]) self.assertTrue(number_data_point_seen and histogram_data_point_seen) def test_basic_metric_success(self): @@ -638,10 +611,8 @@ def test_basic_metric_success(self): HTTP_FLAVOR: "1.1", HTTP_SERVER_NAME: "testserver", } - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertDictEqual( @@ -672,10 +643,8 @@ def test_basic_metric_success_new_semconv(self): HTTP_REQUEST_METHOD: "GET", URL_SCHEME: "https", } - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertDictEqual( @@ -729,10 +698,8 @@ def test_basic_metric_success_both_semconv(self): HTTP_REQUEST_METHOD: "GET", URL_SCHEME: "https", } - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertEqual(point.count, 1) @@ -803,10 +770,8 @@ def test_basic_metric_nonstandard_http_method_success(self): HTTP_FLAVOR: "1.1", HTTP_SERVER_NAME: "testserver", } - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertDictEqual( @@ -837,10 +802,8 @@ def test_basic_metric_nonstandard_http_method_success_new_semconv(self): HTTP_REQUEST_METHOD: "_OTHER", URL_SCHEME: "https", } - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertDictEqual( @@ -894,10 +857,8 @@ def test_basic_metric_nonstandard_http_method_success_both_semconv(self): HTTP_REQUEST_METHOD: "_OTHER", URL_SCHEME: "https", } - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertEqual(point.count, 1) @@ -955,10 +916,8 @@ def test_basic_post_request_metric_success(self): duration = max(round((default_timer() - start) * 1000), 0) response_size = int(response.headers.get("content-length")) request_size = int(response.request.headers.get("content-length")) - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertEqual(point.count, 1) @@ -980,10 +939,8 @@ def test_basic_post_request_metric_success_new_semconv(self): duration_s = max(default_timer() - start, 0) response_size = int(response.headers.get("content-length")) request_size = int(response.request.headers.get("content-length")) - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertEqual(point.count, 1) @@ -1008,10 +965,8 @@ def test_basic_post_request_metric_success_both_semconv(self): duration_s = max(default_timer() - start, 0) response_size = int(response.headers.get("content-length")) request_size = int(response.request.headers.get("content-length")) - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertEqual(point.count, 1) @@ -1036,10 +991,8 @@ def test_metric_uninstrument_app(self): self._client.get("/foobar") self._instrumentor.uninstrument_app(self._app) self._client.get("/foobar") - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertEqual(point.count, 1) @@ -1053,10 +1006,8 @@ def test_metric_uninstrument(self): self._instrumentor.uninstrument() self._client.get("/foobar") - metrics_list = self.memory_metrics_reader.get_metrics_data() - for metric in ( - metrics_list.resource_metrics[0].scope_metrics[0].metrics - ): + metrics = self.get_sorted_metrics(SCOPE) + for metric in metrics: for point in list(metric.data.data_points): if isinstance(point, HistogramDataPoint): self.assertEqual(point.count, 1)