Skip to content

Commit

Permalink
More pytest migration (#397)
Browse files Browse the repository at this point in the history
* More pytest migration
  • Loading branch information
asherf authored May 2, 2023
1 parent 5e8176b commit 1649595
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 31 deletions.
33 changes: 18 additions & 15 deletions django_prometheus/tests/end2end/testapp/test_middleware.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.test import SimpleTestCase, override_settings
import pytest
from testapp.views import ObjectionException

from django_prometheus.testutils import (
Expand All @@ -24,21 +24,24 @@ def T(metric_name):
return "%s_total" % M(metric_name)


@override_settings(PROMETHEUS_LATENCY_BUCKETS=(0.05, 1.0, 2.0, 4.0, 5.0, 10.0, float("inf")))
class TestMiddlewareMetrics(SimpleTestCase):
class TestMiddlewareMetrics:
"""Test django_prometheus.middleware.
Note that counters related to exceptions can't be tested as
Django's test Client only simulates requests and the exception
handling flow is very different in that simulation.
"""

def test_request_counters(self):
@pytest.fixture(autouse=True)
def _setup(self, settings):
settings.PROMETHEUS_LATENCY_BUCKETS = (0.05, 1.0, 2.0, 4.0, 5.0, 10.0, float("inf"))

def test_request_counters(self, client):
registry = save_registry()
self.client.get("/")
self.client.get("/")
self.client.get("/help")
self.client.post("/", {"test": "data"})
client.get("/")
client.get("/")
client.get("/help")
client.post("/", {"test": "data"})

assert_metric_diff(registry, 4, M("requests_before_middlewares_total"))
assert_metric_diff(registry, 4, M("responses_before_middlewares_total"))
Expand Down Expand Up @@ -83,7 +86,7 @@ def test_request_counters(self):
assert_metric_diff(registry, 4, T("responses_total_by_charset"), charset="utf-8")
assert_metric_diff(registry, 0, M("responses_streaming_total"))

def test_latency_histograms(self):
def test_latency_histograms(self, client):
# Caution: this test is timing-based. This is not ideal. It
# runs slowly (each request to /slow takes at least .1 seconds
# to complete), to eliminate flakiness we adjust the buckets used
Expand All @@ -93,7 +96,7 @@ def test_latency_histograms(self):

# This always takes more than .1 second, so checking the lower
# buckets is fine.
self.client.get("/slow")
client.get("/slow")
assert_metric_diff(
registry,
0,
Expand All @@ -111,11 +114,11 @@ def test_latency_histograms(self):
method="GET",
)

def test_exception_latency_histograms(self):
def test_exception_latency_histograms(self, client):
registry = save_registry()

try:
self.client.get("/objection")
client.get("/objection")
except ObjectionException:
pass
assert_metric_diff(
Expand All @@ -127,9 +130,9 @@ def test_exception_latency_histograms(self):
method="GET",
)

def test_streaming_responses(self):
def test_streaming_responses(self, client):
registry = save_registry()
self.client.get("/")
self.client.get("/file")
client.get("/")
client.get("/file")
assert_metric_diff(registry, 1, M("responses_streaming_total"))
assert_metric_diff(registry, 1, M("responses_body_total_bytes_bucket"), le="+Inf")
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.test import SimpleTestCase, override_settings
import pytest
from prometheus_client import REGISTRY
from prometheus_client.metrics import MetricWrapperBase
from testapp.helpers import get_middleware
Expand Down Expand Up @@ -39,28 +39,25 @@ def label_metric(self, metric, request, response=None, **labels):
return super().label_metric(metric, request, response=response, **new_labels)


@override_settings(
MIDDLEWARE=get_middleware(
"testapp.test_middleware_custom_labels.AppMetricsBeforeMiddleware",
"testapp.test_middleware_custom_labels.AppMetricsAfterMiddleware",
)
)
class TestMiddlewareMetricsWithCustomLabels(SimpleTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
class TestMiddlewareMetricsWithCustomLabels:
@pytest.fixture(autouse=True)
def _setup(self, settings):
settings.MIDDLEWARE = get_middleware(
"testapp.test_middleware_custom_labels.AppMetricsBeforeMiddleware",
"testapp.test_middleware_custom_labels.AppMetricsAfterMiddleware",
)
# Allow CustomMetrics to be used
for metric in Metrics._instance.__dict__.values():
if isinstance(metric, MetricWrapperBase):
REGISTRY.unregister(metric)
Metrics._instance = None

def test_request_counters(self):
def test_request_counters(self, client):
registry = save_registry()
self.client.get("/")
self.client.get("/")
self.client.get("/help")
self.client.post("/", {"test": "data"})
client.get("/")
client.get("/")
client.get("/help")
client.post("/", {"test": "data"})

assert_metric_diff(registry, 4, M("requests_before_middlewares_total"))
assert_metric_diff(registry, 4, M("responses_before_middlewares_total"))
Expand Down

0 comments on commit 1649595

Please sign in to comment.