Skip to main content

Profiling plugin for py.test

Project description

Pytest Profiling Plugin
=======================

Profiling plugin for pytest, with tabular and heat graph output.

Tests are profiled with
`cProfile <http://docs.python.org/library/profile.html#module-cProfile>`__
and analysed with
`pstats <http://docs.python.org/library/profile.html#pstats.Stats>`__;
heat graphs are generated using
`gprof2dot <http://code.google.com/p/jrfonseca/wiki/Gprof2Dot>`__ and
`dot <http://www.graphviz.org/>`__.

.. figure:: https://cdn.rawgit.com/manahl/pytest-plugins/master/pytest-profiling/docs/static/profile_combined.svg
:alt: Example Graph

Example Graph

Installation
------------

Install using your favourite package installer:

.. code:: bash

pip install pytest-profilng
# or
easy_install pytest-profiling

Enable the fixture explicitly in your tests or conftest.py (not required
when using setuptools entry points):

.. code:: python

pytest_plugins = ['pytest_profiling']

Usage
-----

Once installed, the plugin provides extra options to pytest:

.. code:: bash

$ py.test --help
...
Profiling:
--profile generate profiling information
--profile-svg generate profiling graph (using gprof2dot and dot
-Tsvg)

The ``--profile`` and ``profile-svg`` options can be combined with any
other option::

::

$ py.test tests/unit/test_logging.py --profile
============================= test session starts ==============================
platform linux2 -- Python 2.6.2 -- pytest-2.2.3
collected 3 items

tests/unit/test_logging.py ...
Profiling (from prof/combined.prof):
Fri Oct 26 11:05:00 2012 prof/combined.prof

289 function calls (278 primitive calls) in 0.001 CPU seconds

Ordered by: cumulative time
List reduced from 61 to 20 due to restriction <20>

ncalls tottime percall cumtime percall filename:lineno(function)
3 0.000 0.000 0.001 0.000 <string>:1(<module>)
6/3 0.000 0.000 0.001 0.000 core.py:344(execute)
3 0.000 0.000 0.001 0.000 python.py:63(pytest_pyfunc_call)
1 0.000 0.000 0.001 0.001 test_logging.py:34(test_flushing)
1 0.000 0.000 0.000 0.000 _startup.py:23(_flush)
2 0.000 0.000 0.000 0.000 mock.py:979(__call__)
2 0.000 0.000 0.000 0.000 mock.py:986(_mock_call)
4 0.000 0.000 0.000 0.000 mock.py:923(_get_child_mock)
6 0.000 0.000 0.000 0.000 mock.py:512(__new__)
2 0.000 0.000 0.000 0.000 mock.py:601(__get_return_value)
4 0.000 0.000 0.000 0.000 mock.py:695(__getattr__)
6 0.000 0.000 0.000 0.000 mock.py:961(__init__)
22/14 0.000 0.000 0.000 0.000 mock.py:794(__setattr__)
6 0.000 0.000 0.000 0.000 core.py:356(getkwargs)
6 0.000 0.000 0.000 0.000 mock.py:521(__init__)
3 0.000 0.000 0.000 0.000 skipping.py:122(pytest_pyfunc_call)
6 0.000 0.000 0.000 0.000 core.py:366(varnames)
3 0.000 0.000 0.000 0.000 skipping.py:125(check_xfail_no_run)
2 0.000 0.000 0.000 0.000 mock.py:866(assert_called_once_with)
6 0.000 0.000 0.000 0.000 mock.py:645(__set_side_effect)


=========================== 3 passed in 0.13 seconds ===========================

pstats files (one per test item) are retained for later analysis in
``prof`` directory, along with a ``combined.prof`` file:

.. code:: bash

$ ls -1 prof/
combined.prof
test_app.prof
test_flushing.prof
test_import.prof

If the ``--profile-svg`` option is given, along with the prof files and
tabular output a svg file will be generated:

.. code:: bash

$ py.test tests/unit/test_logging.py --profile-svg
...
SVG profile in prof/combined.svg.

This is best viewed with a good svg viewer e.g. Chrome.

Changelog
---------

1.0 (2015-12-21)
~~~~~~~~~~~~~~~~

- Initial public release

Project details


Download files

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

Source Distribution

pytest-profiling-1.0.0.tar.gz (5.0 kB view hashes)

Uploaded Source

Built Distributions

pytest_profiling-1.0.0-py2.7.egg (4.0 kB view hashes)

Uploaded Source

pytest_profiling-1.0.0-py2-none-any.whl (6.6 kB view hashes)

Uploaded Python 2

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