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.
Release files for pytest-monitor 1.6.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pytest-monitor-1.6.6.tar.gz | 20.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pytest_monitor-1.6.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.9 kB
Release files / pytest-monitor-1.6.6.tar.gz
| Download URL | pytest-monitor-1.6.6.tar.gz |
|---|---|
| Size | 20.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b0c44dc44a2d6cdd19f84caa18fafeb1227e2b33bcbd11a2071dacd3763e1b6f
|
|
BLAKE2b-256 checksum How to use checksums |
9e5ab4768ee6ba0a47151cf990e129079b4926db9034c45aa47b72793f37c40d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Release files / pytest_monitor-1.6.6-py3-none-any.whl
| Download URL | pytest_monitor-1.6.6-py3-none-any.whl |
|---|---|
| Size | 14.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5be37d14aa423fe97af94bd44e3a47a551bd5d94d64921974580bbaadc1c1c94
|
|
BLAKE2b-256 checksum How to use checksums |
5acb32a51cf49235442ddeb65dd525844e75d6cdd1a30a5d9575d0f3bdfbb418
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|