Skip to content

Testing

prometheus-virtual-metrics defines a pytest fixture called prometheus_virtual_metrics_context_factory which lets you run and query one or more prometheus-virtual-metrics servers inside a test.

class ExamplePlugin:
    def on_range_query_request(self, request, response):
        for timestamp in request.timestamps:
            response.add_sample(
                'example_metric',
                metric_value=1,
                metric_labels={
                    'label1': 'value1',
                },
                timestamp=timestamp,
            )


def test_basic_auth(prometheus_virtual_metrics_context_factory):
    from types import SimpleNamespace

    # this starts a prometheus-virtual-metrics server on a random,
    # unprivileged port
    context = prometheus_virtual_metrics_context_factory(
        settings=SimpleNamespace(
            PLUGINS=[
                ExamplePlugin(),
            ],
        ),
    )

    # run checks
    response = context.request_range(
        'example_metric',
        start=datetime(1970, 1, 1, 0, 0, 0),
        end=datetime(1970, 1, 1, 0, 0, 30),
        step=30,
    )

    assert response['status'] == 'success'

    assert response['data']['result'] == [
        {
            'metric': {
                '__name__': 'example_metric',
                'label1': 'value1',
            },
            'values': [
                [0.0, '1'],
                [30.0, '1'],
            ]
        },
    ]

Attributes:

Name Type Description
loop EventLoop

asyncio event loop

settings module | namespace

settings

get_url(path)

Returns absolute URL to running test server.

Parameters:

Name Type Description Default
path str

Path as string

required

Returns:

Name Type Description
URL str

URL as string

request_instant(query_string, time, step=15, auth=None)

Request data at timestamp.

  • URL: /api/v1/query
  • Hook: on_instant_query_request

Parameters:

Name Type Description Default
query_string str | None

PromQl query as string

required
time datetime

Timstamp

required
step float

Interval between timestamps

15
auth (tuple[str], None)

Basic auth username and password

None

Returns:

Name Type Description
response dict

HTTP response as dict

request_label_names(query_string=None, start=None, end=None, auth=None)

Request label names.

  • URL: /api/v1/labels
  • Hook: on_label_names_request

Parameters:

Name Type Description Default
query_string str | None

PromQl query as string

None
start datetime | None

start as datetime.datetime

None
end datetime | None

end as datetime.datetime

None
auth (tuple[str], None)

Basic auth username and password

None

Returns:

Name Type Description
response dict

HTTP response as dict

request_label_values(label_name, query_string=None, start=None, end=None, auth=None)

Request label values.

  • URL: /api/v1/label/${label}/values
  • Hook: on_label_values_request

Parameters:

Name Type Description Default
label_name str

Label name

required
query_string str | None

PromQl query as string

None
start datetime | None

start as datetime.datetime

None
end datetime | None

end as datetime.datetime

None
auth (tuple[str], None)

Basic auth username and password

None

Returns:

Name Type Description
response dict

HTTP response as dict

request_metric_names(query_string=None, start=None, end=None, request_series=False, auth=None)

Request metric names.

  • URL: /api/v1/${label}/__name__/ or /api/v1/series
  • Hook: on_metric_names_request

Parameters:

Name Type Description Default
query_string str | None

PromQl query as string

None
start datetime | None

start as datetime.datetime

None
end datetime | None

end as datetime.datetime

None
request_series bool

Use timeseries request

False
auth (tuple[str], None)

Basic auth username and password

None

Returns:

Name Type Description
response dict

HTTP response as dict

request_range(query_string, start, end, step=15, auth=None)

Request data in time range.

  • URL: /api/v1/query_range
  • Hook: on_range_query_request

Parameters:

Name Type Description Default
query_string str | None

PromQl query as string

required
start datetime | None

start as datetime.datetime

required
end datetime | None

end as datetime.datetime

required
step float

Interval between timestamps

15
auth (tuple[str], None)

Basic auth username and password

None

Returns:

Name Type Description
response dict

HTTP response as dict

start(host=DEFAULT_HOST, port=DEFAULT_PORT)

Starts the test server. Is called implicitly when using the pytest fixture.

stop()

Stops the running test server. Is called implicitly when using the pytest fixture.