Continuously logs the memory usage of your test session.
pip install pytest-memlog
Use --memlog
to enable the plugin.
By default, memory usage of a test run will be logged to memlog.json
.
--memlog-path
: The path to save the log to, defaults tomemlog.json
.--memlog-interval
: Measurement interval, defaults to 0.1 seconds.--memlog-warmup
: Memlog will capture memory usage for this many seconds before starting your tests. Defaults to 0.
limit_memory(memory)
: Will mark a test as failed if the program memory exceeds this number during a test run. Note that due to garbage collection, this does not necessarily reflect memory usage in a specific test.
pytest-memlog uses a separate process to track the memory of the test process. This allows for a very low overhead, as the only data passed between the processes are test names & the maximum memory usage during a test.
The memory logging is done at fixed intervals (given by --memlog-interval
)
and saved to a JSON log.
Each log entry is of the following form:
{
"rss": 40939520,
"time": 1814626.921,
"name": "tests/test_basic.py::test_0"
}
rss
is the used memory, in bytes.time
is the value fromtime.monotonic()
. You'll probably want to normalize this when analyzing.name
is the name of the current running test, or an empty string between tests.
The visualization at the top was generated using the data from our examples.
You can see how in the sample notebook or view it live.
To generate the log for the examples run:
pytest --memlog ./examples/
Or use it on your own tests!