Skip to content

Commit ef924e3

Browse files
anuraagaxrmx
andauthored
fastapi: use test_base to fetch metrics for assertions or filter locally (#4127)
* fastapi: use test_base to fetch metrics for assertions or filter locally * Pass scope --------- Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
1 parent 6a1a74f commit ef924e3

File tree

1 file changed

+68
-117
lines changed

1 file changed

+68
-117
lines changed

instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py

Lines changed: 68 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,9 @@ def matches(self, scope: Scope) -> tuple[Match, Scope]:
151151
return super().matches(scope)
152152

153153

154+
SCOPE = "opentelemetry.instrumentation.fastapi"
155+
156+
154157
class TestBaseFastAPI(TestBase):
155158
def _create_app(self):
156159
app = self._create_fastapi_app()
@@ -454,7 +457,7 @@ def test_instrument_app_with_instrument(self):
454457
self.assertIn("GET /foobar", span.name)
455458
self.assertEqual(
456459
span.instrumentation_scope.name,
457-
"opentelemetry.instrumentation.fastapi",
460+
SCOPE,
458461
)
459462

460463
def test_uninstrument_app(self):
@@ -525,96 +528,66 @@ def test_fastapi_metrics(self):
525528
self._client.get("/foobar")
526529
self._client.get("/foobar")
527530
self._client.get("/foobar")
528-
metrics_list = self.memory_metrics_reader.get_metrics_data()
529531
number_data_point_seen = False
530532
histogram_data_point_seen = False
531-
self.assertTrue(len(metrics_list.resource_metrics) == 1)
532-
for resource_metric in metrics_list.resource_metrics:
533-
self.assertTrue(len(resource_metric.scope_metrics) == 1)
534-
for scope_metric in resource_metric.scope_metrics:
535-
self.assertEqual(
536-
scope_metric.scope.name,
537-
"opentelemetry.instrumentation.fastapi",
538-
)
539-
self.assertTrue(len(scope_metric.metrics) == 3)
540-
for metric in scope_metric.metrics:
541-
self.assertIn(metric.name, _expected_metric_names_old)
542-
data_points = list(metric.data.data_points)
543-
self.assertEqual(len(data_points), 1)
544-
for point in data_points:
545-
if isinstance(point, HistogramDataPoint):
546-
self.assertEqual(point.count, 3)
547-
histogram_data_point_seen = True
548-
if isinstance(point, NumberDataPoint):
549-
number_data_point_seen = True
550-
for attr in point.attributes:
551-
self.assertIn(
552-
attr, _recommended_attrs_old[metric.name]
553-
)
533+
metrics = self.get_sorted_metrics(SCOPE)
534+
self.assertTrue(len(metrics) == 3)
535+
for metric in metrics:
536+
self.assertIn(metric.name, _expected_metric_names_old)
537+
data_points = list(metric.data.data_points)
538+
self.assertEqual(len(data_points), 1)
539+
for point in data_points:
540+
if isinstance(point, HistogramDataPoint):
541+
self.assertEqual(point.count, 3)
542+
histogram_data_point_seen = True
543+
if isinstance(point, NumberDataPoint):
544+
number_data_point_seen = True
545+
for attr in point.attributes:
546+
self.assertIn(attr, _recommended_attrs_old[metric.name])
554547
self.assertTrue(number_data_point_seen and histogram_data_point_seen)
555548

556549
def test_fastapi_metrics_new_semconv(self):
557550
self._client.get("/foobar")
558551
self._client.get("/foobar")
559552
self._client.get("/foobar")
560-
metrics_list = self.memory_metrics_reader.get_metrics_data()
561553
number_data_point_seen = False
562554
histogram_data_point_seen = False
563-
self.assertTrue(len(metrics_list.resource_metrics) == 1)
564-
for resource_metric in metrics_list.resource_metrics:
565-
self.assertTrue(len(resource_metric.scope_metrics) == 1)
566-
for scope_metric in resource_metric.scope_metrics:
567-
self.assertEqual(
568-
scope_metric.scope.name,
569-
"opentelemetry.instrumentation.fastapi",
570-
)
571-
self.assertTrue(len(scope_metric.metrics) == 3)
572-
for metric in scope_metric.metrics:
573-
self.assertIn(metric.name, _expected_metric_names_new)
574-
data_points = list(metric.data.data_points)
575-
self.assertEqual(len(data_points), 1)
576-
for point in data_points:
577-
if isinstance(point, HistogramDataPoint):
578-
self.assertEqual(point.count, 3)
579-
histogram_data_point_seen = True
580-
if isinstance(point, NumberDataPoint):
581-
number_data_point_seen = True
582-
for attr in point.attributes:
583-
self.assertIn(
584-
attr, _recommended_attrs_new[metric.name]
585-
)
555+
metrics = self.get_sorted_metrics(SCOPE)
556+
self.assertTrue(len(metrics) == 3)
557+
for metric in metrics:
558+
self.assertIn(metric.name, _expected_metric_names_new)
559+
data_points = list(metric.data.data_points)
560+
self.assertEqual(len(data_points), 1)
561+
for point in data_points:
562+
if isinstance(point, HistogramDataPoint):
563+
self.assertEqual(point.count, 3)
564+
histogram_data_point_seen = True
565+
if isinstance(point, NumberDataPoint):
566+
number_data_point_seen = True
567+
for attr in point.attributes:
568+
self.assertIn(attr, _recommended_attrs_new[metric.name])
586569
self.assertTrue(number_data_point_seen and histogram_data_point_seen)
587570

588571
def test_fastapi_metrics_both_semconv(self):
589572
self._client.get("/foobar")
590573
self._client.get("/foobar")
591574
self._client.get("/foobar")
592-
metrics_list = self.memory_metrics_reader.get_metrics_data()
593575
number_data_point_seen = False
594576
histogram_data_point_seen = False
595-
self.assertTrue(len(metrics_list.resource_metrics) == 1)
596-
for resource_metric in metrics_list.resource_metrics:
597-
self.assertTrue(len(resource_metric.scope_metrics) == 1)
598-
for scope_metric in resource_metric.scope_metrics:
599-
self.assertEqual(
600-
scope_metric.scope.name,
601-
"opentelemetry.instrumentation.fastapi",
602-
)
603-
self.assertTrue(len(scope_metric.metrics) == 5)
604-
for metric in scope_metric.metrics:
605-
self.assertIn(metric.name, _expected_metric_names_both)
606-
data_points = list(metric.data.data_points)
607-
self.assertEqual(len(data_points), 1)
608-
for point in data_points:
609-
if isinstance(point, HistogramDataPoint):
610-
self.assertEqual(point.count, 3)
611-
histogram_data_point_seen = True
612-
if isinstance(point, NumberDataPoint):
613-
number_data_point_seen = True
614-
for attr in point.attributes:
615-
self.assertIn(
616-
attr, _recommended_attrs_both[metric.name]
617-
)
577+
metrics = self.get_sorted_metrics(SCOPE)
578+
self.assertTrue(len(metrics) == 5)
579+
for metric in metrics:
580+
self.assertIn(metric.name, _expected_metric_names_both)
581+
data_points = list(metric.data.data_points)
582+
self.assertEqual(len(data_points), 1)
583+
for point in data_points:
584+
if isinstance(point, HistogramDataPoint):
585+
self.assertEqual(point.count, 3)
586+
histogram_data_point_seen = True
587+
if isinstance(point, NumberDataPoint):
588+
number_data_point_seen = True
589+
for attr in point.attributes:
590+
self.assertIn(attr, _recommended_attrs_both[metric.name])
618591
self.assertTrue(number_data_point_seen and histogram_data_point_seen)
619592

620593
def test_basic_metric_success(self):
@@ -638,10 +611,8 @@ def test_basic_metric_success(self):
638611
HTTP_FLAVOR: "1.1",
639612
HTTP_SERVER_NAME: "testserver",
640613
}
641-
metrics_list = self.memory_metrics_reader.get_metrics_data()
642-
for metric in (
643-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
644-
):
614+
metrics = self.get_sorted_metrics(SCOPE)
615+
for metric in metrics:
645616
for point in list(metric.data.data_points):
646617
if isinstance(point, HistogramDataPoint):
647618
self.assertDictEqual(
@@ -672,10 +643,8 @@ def test_basic_metric_success_new_semconv(self):
672643
HTTP_REQUEST_METHOD: "GET",
673644
URL_SCHEME: "https",
674645
}
675-
metrics_list = self.memory_metrics_reader.get_metrics_data()
676-
for metric in (
677-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
678-
):
646+
metrics = self.get_sorted_metrics(SCOPE)
647+
for metric in metrics:
679648
for point in list(metric.data.data_points):
680649
if isinstance(point, HistogramDataPoint):
681650
self.assertDictEqual(
@@ -729,10 +698,8 @@ def test_basic_metric_success_both_semconv(self):
729698
HTTP_REQUEST_METHOD: "GET",
730699
URL_SCHEME: "https",
731700
}
732-
metrics_list = self.memory_metrics_reader.get_metrics_data()
733-
for metric in (
734-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
735-
):
701+
metrics = self.get_sorted_metrics(SCOPE)
702+
for metric in metrics:
736703
for point in list(metric.data.data_points):
737704
if isinstance(point, HistogramDataPoint):
738705
self.assertEqual(point.count, 1)
@@ -803,10 +770,8 @@ def test_basic_metric_nonstandard_http_method_success(self):
803770
HTTP_FLAVOR: "1.1",
804771
HTTP_SERVER_NAME: "testserver",
805772
}
806-
metrics_list = self.memory_metrics_reader.get_metrics_data()
807-
for metric in (
808-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
809-
):
773+
metrics = self.get_sorted_metrics(SCOPE)
774+
for metric in metrics:
810775
for point in list(metric.data.data_points):
811776
if isinstance(point, HistogramDataPoint):
812777
self.assertDictEqual(
@@ -837,10 +802,8 @@ def test_basic_metric_nonstandard_http_method_success_new_semconv(self):
837802
HTTP_REQUEST_METHOD: "_OTHER",
838803
URL_SCHEME: "https",
839804
}
840-
metrics_list = self.memory_metrics_reader.get_metrics_data()
841-
for metric in (
842-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
843-
):
805+
metrics = self.get_sorted_metrics(SCOPE)
806+
for metric in metrics:
844807
for point in list(metric.data.data_points):
845808
if isinstance(point, HistogramDataPoint):
846809
self.assertDictEqual(
@@ -894,10 +857,8 @@ def test_basic_metric_nonstandard_http_method_success_both_semconv(self):
894857
HTTP_REQUEST_METHOD: "_OTHER",
895858
URL_SCHEME: "https",
896859
}
897-
metrics_list = self.memory_metrics_reader.get_metrics_data()
898-
for metric in (
899-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
900-
):
860+
metrics = self.get_sorted_metrics(SCOPE)
861+
for metric in metrics:
901862
for point in list(metric.data.data_points):
902863
if isinstance(point, HistogramDataPoint):
903864
self.assertEqual(point.count, 1)
@@ -955,10 +916,8 @@ def test_basic_post_request_metric_success(self):
955916
duration = max(round((default_timer() - start) * 1000), 0)
956917
response_size = int(response.headers.get("content-length"))
957918
request_size = int(response.request.headers.get("content-length"))
958-
metrics_list = self.memory_metrics_reader.get_metrics_data()
959-
for metric in (
960-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
961-
):
919+
metrics = self.get_sorted_metrics(SCOPE)
920+
for metric in metrics:
962921
for point in list(metric.data.data_points):
963922
if isinstance(point, HistogramDataPoint):
964923
self.assertEqual(point.count, 1)
@@ -980,10 +939,8 @@ def test_basic_post_request_metric_success_new_semconv(self):
980939
duration_s = max(default_timer() - start, 0)
981940
response_size = int(response.headers.get("content-length"))
982941
request_size = int(response.request.headers.get("content-length"))
983-
metrics_list = self.memory_metrics_reader.get_metrics_data()
984-
for metric in (
985-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
986-
):
942+
metrics = self.get_sorted_metrics(SCOPE)
943+
for metric in metrics:
987944
for point in list(metric.data.data_points):
988945
if isinstance(point, HistogramDataPoint):
989946
self.assertEqual(point.count, 1)
@@ -1008,10 +965,8 @@ def test_basic_post_request_metric_success_both_semconv(self):
1008965
duration_s = max(default_timer() - start, 0)
1009966
response_size = int(response.headers.get("content-length"))
1010967
request_size = int(response.request.headers.get("content-length"))
1011-
metrics_list = self.memory_metrics_reader.get_metrics_data()
1012-
for metric in (
1013-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
1014-
):
968+
metrics = self.get_sorted_metrics(SCOPE)
969+
for metric in metrics:
1015970
for point in list(metric.data.data_points):
1016971
if isinstance(point, HistogramDataPoint):
1017972
self.assertEqual(point.count, 1)
@@ -1036,10 +991,8 @@ def test_metric_uninstrument_app(self):
1036991
self._client.get("/foobar")
1037992
self._instrumentor.uninstrument_app(self._app)
1038993
self._client.get("/foobar")
1039-
metrics_list = self.memory_metrics_reader.get_metrics_data()
1040-
for metric in (
1041-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
1042-
):
994+
metrics = self.get_sorted_metrics(SCOPE)
995+
for metric in metrics:
1043996
for point in list(metric.data.data_points):
1044997
if isinstance(point, HistogramDataPoint):
1045998
self.assertEqual(point.count, 1)
@@ -1053,10 +1006,8 @@ def test_metric_uninstrument(self):
10531006
self._instrumentor.uninstrument()
10541007
self._client.get("/foobar")
10551008

1056-
metrics_list = self.memory_metrics_reader.get_metrics_data()
1057-
for metric in (
1058-
metrics_list.resource_metrics[0].scope_metrics[0].metrics
1059-
):
1009+
metrics = self.get_sorted_metrics(SCOPE)
1010+
for metric in metrics:
10601011
for point in list(metric.data.data_points):
10611012
if isinstance(point, HistogramDataPoint):
10621013
self.assertEqual(point.count, 1)

0 commit comments

Comments
 (0)