import re import time import pytest import requests from pyinfra.payload_processing.monitor import PrometheusMonitor @pytest.fixture(scope="class") def monitored_mock_function(metric_prefix, host, port): def process(data=None): time.sleep(2) return ["result1", "result2", "result3"] monitor = PrometheusMonitor(metric_prefix, host, port) return monitor(process) @pytest.fixture def metric_endpoint(host, port): return f"http://{host}:{port}/prometheus" @pytest.mark.parametrize("metric_prefix, host, port", [("test", "0.0.0.0", 8000)], scope="class") class TestPrometheusMonitor: def test_prometheus_endpoint_is_available(self, metric_endpoint, monitored_mock_function): resp = requests.get(metric_endpoint) assert resp.status_code == 200 def test_processing_with_a_monitored_fn_increases_parameter_counter( self, metric_endpoint, metric_prefix, monitored_mock_function, ): monitored_mock_function(data=None) resp = requests.get(metric_endpoint) pattern = re.compile(rf".*{metric_prefix}_processing_time_count (\d\.\d).*") assert pattern.search(resp.text).group(1) == "1.0" monitored_mock_function(data=None) resp = requests.get(metric_endpoint) assert pattern.search(resp.text).group(1) == "2.0"