Skip to main content

Pytest plugin for analyzing resource usage.

Project description

Pytest-Monitor

pytest-monitor

Documentation Status PyPI version Python versions See Build Status on Circle CI https://anaconda.org/conda-forge/pytest-monitor/badges/platforms.svg https://anaconda.org/conda-forge/pytest-monitor/badges/version.svg https://img.shields.io/badge/License-MIT-blue.svg

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.

Author

The main author of pytest-monitor is Jean-Sébastien Dieu, who can be reached at jdieu@salsify.fr.


This pytest plugin was generated with Cookiecutter along with @hackebrot’s cookiecutter-pytest-plugin template.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest-monitor-1.6.6.tar.gz (20.1 kB view hashes)

Uploaded source

Built Distribution

pytest_monitor-1.6.6-py3-none-any.whl (14.8 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page