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()
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.2.tar.gz
(4.8 kB
view hashes)
Built Distribution
Close
Hashes for pytest_structlog-0.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 82b387afbdbe343c31e5454deb99a55fd9b876d0c552392bbe0670b26e385ef1 |
|
MD5 | 61d601af03edb7fb3caf4a4f0e005225 |
|
BLAKE2b-256 | 80999d20f200c31527a3ad8809a6c566ea8a8cf5c0e7ffe66f7233a6f7ba38e8 |