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.5.tar.gz
(5.6 kB
view hashes)
Built Distribution
Close
Hashes for pytest_structlog-0.5-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 057c9e6b20cedc10071b65623e6dc9af4a025e5a13d73defa992da465e32ac22 |
|
MD5 | 2f0b995f897a784b5a11e772d322abaa |
|
BLAKE2-256 | d1739a5e29e48ff229fdde040aa599097d970dc67710f881933be255c36d5291 |