Pytest plugin to measure fixture and test durations.
In order to get the pure test setup/teardown durations, plugin subtracts time taken by fixtures which scope is larger than "function".
In comparison to the builtin pytest "--durations", the plugin shows fixture durations separately from test function durations and supports xdist and time travelling packages.
$ pip install pytest-durations
pytest-durations:
--pytest-durations=N Show N slowest setup/test durations (N=0 to disable
plugin). Default 30
--pytest-durations-min=N
Minimal duration in seconds for inclusion in slowest
list. Default 0.005
--pytest-resultlog=FILE
Result log filename or dash for terminal output.
Default "-"
Note: please don't be mistaken by --durations
options which comes from pytest itself.
============================== fixture duration top ==============================
total name num avg min
0:00:00.115563 fake_pluginmanager 3 0:00:00.034653 0:00:00.033694
0:00:00.060115 fake_config 2 0:00:00.030057 0:00:00.029842
0:00:00.048612 fake_session 2 0:00:00.024306 0:00:00.023556
0:00:00.016073 fake_node 2 0:00:00.008037 0:00:00.008029
0:00:00.012089 pytester 6 0:00:00.001444 0:00:00.001330
0:00:00.008237 fake_parser 1 0:00:00.008237 0:00:00.008237
0:00:00.265457 grand total 78 0:00:00.000031 0:00:00.000018
============================= test call duration top =============================
total name num avg min
0:00:00.755826 test_plugin_xdist_enabled 1 0:00:00.755826 0:00:00.755826
0:00:00.246548 test_plugin_with_options 3 0:00:00.081849 0:00:00.081029
0:00:00.158057 test_get_test_key 9 0:00:00.017376 0:00:00.016729
0:00:00.121555 test_plugin_disable 1 0:00:00.121555 0:00:00.121555
0:00:00.078009 test_plugin_xdist_disabled 1 0:00:00.078009 0:00:00.078009
0:00:00.037713 test_get_current_ticks_frozen 1 0:00:00.037713 0:00:00.037713
0:00:01.405064 grand total 31 0:00:00.000708 0:00:00.000162
============================= test setup duration top ============================
total name num avg min
0:00:00.065316 test_pytest_configure_disabled 1 0:00:00.065316 0:00:00.065316
0:00:00.063908 test_pytest_configure 1 0:00:00.063908 0:00:00.063908
0:00:00.055924 test_pytest_addoption 1 0:00:00.055924 0:00:00.055924
0:00:00.025543 test_pytest_sessionfinish_noxdist 1 0:00:00.025543 0:00:00.025543
0:00:00.024043 test_pytest_sessionfinish 1 0:00:00.024043 0:00:00.024043
0:00:00.011220 test_plugin_with_options 3 0:00:00.002642 0:00:00.002580
0:00:00.008443 test_pytest_testnodedown_noxdist 1 0:00:00.008443 0:00:00.008443
0:00:00.008431 test_pytest_testnodedown 1 0:00:00.008431 0:00:00.008431
0:00:00.274801 grand total 31 0:00:00.002182 0:00:00.000149
=========================== test teardown duration top ===========================
total name num avg min
0:00:00.007093 grand total 31 0:00:00.000178 0:00:00.000126
=============================== 31 passed in 1.77s ===============================
Project uses poetry for dependencies management, pytest for testing and pre-commit for coding standard checks.
$ pip install poetry
$ poetry install
$ pre-commit install
$ pytest tests
- Fix a time-machine time.monotonic() unpatching glitch by using time.time() instead (#19)
- Add Python 3.13 to supported versions
- Drop Python 3.8 from supported versions, because of poetry and time_machine dependencies
- Add time_machine package compatibility (#19)
- Add README commentary on the difference from pytest builtin "--duration" function (#18)
- Replace separated code style packages with ruff
- Upgrade poetry and package dependencies versions
- Add command line option to write the measure report to a file instead of terminal (#16)
- Upgrade development dependencies
- Update supported Python versions
- Use same width for all reports (#6)
- Improve test coverage (#7)
- Continuous delivery GitHub workflow
- Do not interoperate with xdist if it is disabled or absent
- Grand total row shows real min/max values instead of averages
- First Release