Pytest plugin for analyzing resource usage.
Project description
pytest-monitor
Pytest-monitor is a pytest plugin designed for analyzing resource usage.
Features
Analyze your resources consumption through test functions:
memory consumption
time duration
CPU usage
Keep a history of your resource consumption measurements.
Compare how your code behaves between different environments.
Usage
Simply run pytest as usual: pytest-monitor is active by default as soon as it is installed. After running your first session, a .pymon sqlite database will be accessible in the directory where pytest was run.
Example of information collected for the execution context:
ENV_H |
CPU_COUNT |
CPU_FREQUENCY_MHZ |
CPU_TYPE |
CPU_VENDOR |
RAM_TOTAL_MB |
MACHINE_NODE |
MACHINE_TYPE |
MACHINE_ARCH |
SYSTEM_INFO |
PYTHON_INFO |
---|---|---|---|---|---|---|---|---|---|---|
8294b1326007d9f4c8a1680f9590c23d |
36 |
3000 |
x86_64 |
Intel(R) Xeon(R) Gold 6154 CPU @ 3.00GHz |
772249 |
some.host.vm.fr |
x86_64 |
64bit |
Linux - 3.10.0-693.el7.x86_64 |
3.6.8 (default, Jun 28 2019, 11:09:04) n[GCC … |
Here is an example of collected data stored in the result database:
RUN_DATE |
ENV_H |
SCM_ID |
ITEM_START_TIME |
ITEM |
KIND |
COMPONENT |
TOTAL_TIME |
USER_TIME |
KERNEL_TIME |
CPU_USAGE |
MEM_USAGE |
---|---|---|---|---|---|---|---|---|---|---|---|
2020-02-17T09:11:36.731233 |
8294b1326007d9f4c8a1680f9590c23d |
de23e6bdb987ae21e84e6c7c0357488ee66f2639 |
2020-02-17T09:11:36.890477 |
pkg1.test_mod1/test_sleep1 |
function |
None |
1.005669 |
0.54 |
0.06 |
0.596618 |
1.781250 |
2020-02-17T09:11:36.731233 |
8294b1326007d9f4c8a1680f9590c23d |
de23e6bdb987ae21e84e6c7c0357488ee66f2639 |
2020-02-17T09:11:39.912029 |
pkg1.test_mod1/test_heavy[10-10] |
function |
None |
0.029627 |
0.55 |
0.08 |
21.264498 |
1.781250 |
2020-02-17T09:11:36.731233 |
8294b1326007d9f4c8a1680f9590c23d |
de23e6bdb987ae21e84e6c7c0357488ee66f2639 |
2020-02-17T09:11:39.948922 |
pkg1.test_mod1/test_heavy[100-100] |
function |
None |
0.028262 |
0.56 |
0.09 |
22.998773 |
1.781250 |
2020-02-17T09:11:36.731233 |
8294b1326007d9f4c8a1680f9590c23d |
de23e6bdb987ae21e84e6c7c0357488ee66f2639 |
2020-02-17T09:11:39.983869 |
pkg1.test_mod1/test_heavy[1000-1000] |
function |
None |
0.030131 |
0.56 |
0.10 |
21.904277 |
2.132812 |
2020-02-17T09:11:36.731233 |
8294b1326007d9f4c8a1680f9590c23d |
de23e6bdb987ae21e84e6c7c0357488ee66f2639 |
2020-02-17T09:11:40.020823 |
pkg1.test_mod1/test_heavy[10000-10000] |
function |
None |
0.060060 |
0.57 |
0.14 |
11.821601 |
41.292969 |
2020-02-17T09:11:36.731233 |
8294b1326007d9f4c8a1680f9590c23d |
de23e6bdb987ae21e84e6c7c0357488ee66f2639 |
2020-02-17T09:11:40.093490 |
pkg1.test_mod2/test_sleep_400ms |
function |
None |
0.404860 |
0.58 |
0.15 |
1.803093 |
2.320312 |
2020-02-17T09:11:36.731233 |
8294b1326007d9f4c8a1680f9590c23d |
de23e6bdb987ae21e84e6c7c0357488ee66f2639 |
2020-02-17T09:11:40.510525 |
pkg2.test_mod_a/test_master_sleep |
function |
None |
5.006039 |
5.57 |
0.15 |
1.142620 |
2.320312 |
2020-02-17T09:11:36.731233 |
8294b1326007d9f4c8a1680f9590c23d |
de23e6bdb987ae21e84e6c7c0357488ee66f2639 |
2020-02-17T09:11:45.530780 |
pkg3.test_mod_cl/test_method1 |
function |
None |
0.030505 |
5.58 |
0.16 |
188.164762 |
2.320312 |
2020-02-17T09:11:36.731233 |
8294b1326007d9f4c8a1680f9590c23d |
de23e6bdb987ae21e84e6c7c0357488ee66f2639 |
2020-02-17T09:11:50.582954 |
pkg4.test_mod_a/test_force_monitor |
function |
test |
1.005015 |
11.57 |
0.17 |
11.681416 |
2.320312 |
Documentation
A full documentation is available.
Installation
You can install pytest-monitor via conda (through the conda-forge channel):
$ conda install pytest-monitor -c https://conda.anaconda.org/conda-forge
Another possibility is to install pytest-monitor via pip from PyPI:
$ pip install pytest-monitor
Requirements
You will need a valid Python 3.5+ interpreter. To get measures, we rely on:
psutil to extract CPU usage
memory_profiler to collect memory usage
and pytest (obviously!)
Note: this plugin doesn’t work with unittest
Storage backends
By default, pytest-monitor stores its result in a local SQLite3 local database, making results accessible. If you need a more powerful way to analyze your results, checkout the monitor-server-api which brings both a REST Api for storing and historize your results and an API to query your data. An alternative service (using MongoDB) can be used thanks to a contribution from @dremdem: pytest-monitor-backend.
Contributing
Contributions are very welcome. Tests can be run with tox. Before submitting a pull request, please ensure that:
both internal tests and examples are passing.
internal tests have been written if necessary.
if your contribution provides a new feature, make sure to provide an example and update the documentation accordingly.
License
This code is distributed under the MIT license. pytest-monitor is free, open-source software.
Issues
If you encounter any problem, please file an issue along with a detailed description.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pytest_monitor-1.6.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5be37d14aa423fe97af94bd44e3a47a551bd5d94d64921974580bbaadc1c1c94 |
|
MD5 | 5cce363c08eeb710fb87a4c5ea8a80e8 |
|
BLAKE2b-256 | 5acb32a51cf49235442ddeb65dd525844e75d6cdd1a30a5d9575d0f3bdfbb418 |