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-profiling
# 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
Profiling plugin by default names pstats filename as corresponding test
name. If full path is longer that operation system allows then plugin
renames it to first 4 bytes of md5 hash of test name:
.. code:: bash
$ ls -1 prof/
combined.prof
test_not_longer_than_max_allowed.prof
68b329da.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.1.0 (2016-2-15)
~~~~~~~~~~~~~~~~~
- New plugin: devpi server fixture
- pytest-profiling improvement: overly-long .prof files are saved as
the short hash of the test name (Thanks to Vladimir Lagunov for PR)
- Changed default behavior of workspace.run() to not use a subshell for
security reasons
- Corrected virtualenv.run() method to handle arguments the same as the
parent method workspace.run()
- Removed deprecated '--distribute' from virtualenv args
1.0.1 (2015-12-23)
~~~~~~~~~~~~~~~~~~
- Packaging bugfix
1.0.0 (2015-12-21)
~~~~~~~~~~~~~~~~~~
- Initial public release
=======================
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-profiling
# 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
Profiling plugin by default names pstats filename as corresponding test
name. If full path is longer that operation system allows then plugin
renames it to first 4 bytes of md5 hash of test name:
.. code:: bash
$ ls -1 prof/
combined.prof
test_not_longer_than_max_allowed.prof
68b329da.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.1.0 (2016-2-15)
~~~~~~~~~~~~~~~~~
- New plugin: devpi server fixture
- pytest-profiling improvement: overly-long .prof files are saved as
the short hash of the test name (Thanks to Vladimir Lagunov for PR)
- Changed default behavior of workspace.run() to not use a subshell for
security reasons
- Corrected virtualenv.run() method to handle arguments the same as the
parent method workspace.run()
- Removed deprecated '--distribute' from virtualenv args
1.0.1 (2015-12-23)
~~~~~~~~~~~~~~~~~~
- Packaging bugfix
1.0.0 (2015-12-21)
~~~~~~~~~~~~~~~~~~
- Initial public release
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
pytest-profiling-1.1.0.tar.gz
(24.3 kB
view hashes)
Built Distributions
Close
Hashes for pytest_profiling-1.1.0-py2.7.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e60f4000a639c3fa1785f69ece9ef3a09719dc97c8fad9b8d3bb998487e4a0a |
|
MD5 | d8d1acd41acf953f96bd56ff95a65470 |
|
BLAKE2b-256 | 69269f0b44f95fcbe5b5001a0d1b69aa2e6edf927c4b2ec333c2ec1b7421baa7 |
Close
Hashes for pytest_profiling-1.1.0-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b5cd18f1499bf1ea73967800d3bbc45b517d48f1b14e3e4e65f8027fe6a1e8db |
|
MD5 | 5590b4c71fa2518ac1d27f4d4b54a369 |
|
BLAKE2b-256 | de232929d7743a614216867cfaa1fc53bfb1ec506ec18e57ef7c4f42ec031abd |