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
File details
Details for the file pytest-monitor-1.6.3.tar.gz
.
File metadata
- Download URL: pytest-monitor-1.6.3.tar.gz
- Upload date:
- Size: 16.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/0.0.0 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea9495aff1d2cc2705b94fbb7eded88d981d8ded532a66071f66ef89d8976e21 |
|
MD5 | d04b94862b9a07c0c1325e3948eb33c7 |
|
BLAKE2b-256 | 837ea7b7b5f34c8f550697a7003b950e808f76da7a8100c356043648cf75ce6e |
File details
Details for the file pytest_monitor-1.6.3-py3-none-any.whl
.
File metadata
- Download URL: pytest_monitor-1.6.3-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/0.0.0 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7f9a85fa418f306b37c07c8a721751d4dfc6eab3fa1e4a2b26a44aa43bfe28c |
|
MD5 | 64d0f2c4f5b6b4d527b0a22fbd1eb8f3 |
|
BLAKE2b-256 | af896bd07297de65a09f3303815c26e553bb9ed73442955e740ea3e0e5a50ffe |