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.