Structured logging assertions
Project description
pytest-structlog
Structured logging assertions. pytest + structlog = pytest-structlog.
Installation:
$ pip install pytest-structlog
Usage:
The fixture name is log. It has two attributes of interest: log.events is a list of events from captured log calls, and log.has is a helper function for asserting a single event was logged within the expected context.
Suppose you have some library module, your_lib, which is using structlog:
# your_lib.py
from structlog import get_logger
logger = get_logger(__name__)
def spline_reticulator():
logger.info("reticulating splines")
for i in range(3):
logger.debug("processing", spline=i)
logger.info("reticulated splines", n_splines=3)
Then your test suite might use assertions such as shown below:
# test_your_lib.py
from your_lib import spline_reticulator
def test_spline_reticulator(log):
assert len(log.events) == 0
spline_reticulator()
assert len(log.events) == 5
# can assert on the event only
assert log.has("reticulating splines")
# can assert with subcontext
assert log.has("reticulated splines")
assert log.has("reticulated splines", n_splines=3)
assert log.has("reticulated splines", n_splines=3, level="info")
# but not incorrect context
assert not log.has("reticulated splines", n_splines=42)
assert not log.has("reticulated splines", key="bogus")
# can assert with the event dicts directly
assert log.events == [
{"event": "reticulating splines", "level": "info"},
{"event": "processing", "level": "debug", "spline": 0},
{"event": "processing", "level": "debug", "spline": 1},
{"event": "processing", "level": "debug", "spline": 2},
{"event": "reticulated splines", "level": "info", "n_splines": 3},
]
# can use membership to check for a single event's data
assert {"event": "reticulating splines", "level": "info"} in log.events
# can use >= to specify only the events you're interested in
assert log.events >= [
{"event": "processing", "level": "debug", "spline": 0},
{"event": "processing", "level": "debug", "spline": 2},
]
# or put the comparison the other way around if you prefer
assert [
{"event": "processing", "level": "debug", "spline": 0},
{"event": "processing", "level": "debug", "spline": 2},
] <= log.events
# note: comparisons are order sensitive!
assert not [
{"event": "processing", "level": "debug", "spline": 2},
{"event": "processing", "level": "debug", "spline": 0},
] <= log.events
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pytest-structlog-0.1.tar.gz
(4.6 kB
view hashes)
Built Distribution
Close
Hashes for pytest_structlog-0.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41154e912f4210e42a8b944eef2b83397a0315417563861257118e53051f1947 |
|
MD5 | 2c3292041eb989e0db8113070c025f46 |
|
BLAKE2b-256 | c81fdc367638f3f896d8fa4db21f42f923ce7d8c2249c89709f2e24032aedea8 |