Skip to main content
Project Status: Active — The project has reached a stable, usable state and is being actively developed. CI Status https://codecov.io/gh/jwodder/pytest-fail-slow/branch/master/graph/badge.svg https://img.shields.io/pypi/pyversions/pytest-fail-slow.svg Conda Version MIT License

GitHub | PyPI | Issues | Changelog

pytest-fail-slow is a pytest plugin for treating tests as failed if they took too long to run. It adds markers for failing tests if they or their setup stages run for longer than a given duration, along with command-line options for applying the same cutoff to all tests.

Note that slow tests will still be run to completion; if you want them to instead be stopped early, use pytest-timeout.

Installation

pytest-fail-slow requires Python 3.8 or higher and pytest 7.0 or higher. Just use pip for Python 3 (You have pip, right?) to install it:

python3 -m pip install pytest-fail-slow

Usage

Failing Slow Tests

To cause a specific test to fail if it takes too long to run, apply the fail_slow marker to it, with the desired cutoff time as the argument:

import pytest

@pytest.mark.fail_slow("5s")
def test_something_sluggish():
    ...

In addition, the --fail-slow DURATION option can be passed to the pytest command to affect all tests in that run. If --fail-slow is given and a test has the fail_slow marker, the duration given by the marker takes precedence for that test.

If a test fails due to being slow, pytest’s output will include the test’s duration and the duration threshold, like so:

________________________________ test_func ________________________________
Test passed but took too long to run: Duration 123.0s > 5.0s

Note: This feature only takes the durations for tests themselves into consideration. If a test passes in less than the specified duration, but one or more fixture setups/teardowns take longer than the duration, the test will still be marked as passing. To fail a test if the setup takes too long, see below.

Failing Slow Setups

New in version 0.4.0

To cause a specific test to fail if the setup steps for all of its fixtures combined take too long to run, apply the fail_slow_setup marker to it, with the desired cutoff time as the argument:

import pytest

@pytest.mark.fail_slow_setup("5s")
def test_costly_resource(slow_to_create):
    ...

Do not apply the marker to the test’s fixtures; markers have no effect on fixtures.

In addition, the --fail-slow-setup DURATION option can be passed to the pytest command to affect all tests in that run. If --fail-slow-setup is given and a test has the fail_slow_setup marker, the duration given by the marker takes precedence for that test.

If the setup for a test takes too long to run, the test will be marked as “errored,” the test itself will not be run, and pytest’s output will include the setup stage’s duration and the duration threshold, like so:

_______________________ ERROR at setup of test_func _______________________
Setup passed but took too long to run: Duration 123.0s > 5.0s

Note: If a test depends on multiple fixtures and just one of them exceeds the given duration on its own, the remaining fixtures will still have their setup steps run. Also, all fixture teardowns will still be run after the test would have run.

Specifying Durations

A duration passed to a marker or command-line option can be either a bare number of seconds or else a floating-point number followed by one of the following units (case insensitive):

  • h, hour, hours

  • m, min, mins, minute, minutes

  • s, sec, secs, second, seconds

  • ms, milli, millisec, milliseconds

  • us, μs, micro, microsec, microseconds

Metadata

Release files for pytest-fail-slow 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pytest-fail-slow 0.5.0
File Size Uploaded
pytest_fail_slow-0.5.0.tar.gz 7.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pytest-fail-slow 0.5.0
File Interpreter ABI Platform
pytest_fail_slow-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 13.5 kB

Release files / pytest_fail_slow-0.5.0.tar.gz

Download URL pytest_fail_slow-0.5.0.tar.gz
Size 7.7 kB
Tags Source
SHA-256 checksum
How to use checksums
fbfc3de71e9376a33c128324ef5e4826d8a8ea262b71abbc614f213508f619bd
BLAKE2b-256 checksum
How to use checksums
3c0e7720ced26fd3d3e2723352a6b5aacfa05dad13829796faed336620e716b9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.7

Release files / pytest_fail_slow-0.5.0-py3-none-any.whl

Download URL pytest_fail_slow-0.5.0-py3-none-any.whl
Size 5.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e5c8b388d20c5ed06bedb90bc33c5af9f5767c11e5d5d04169c0155dce5a9d5f
BLAKE2b-256 checksum
How to use checksums
02be5ae7ad60612ab291721ce875c2de907b18f895cf00db989bd7333e7b948a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.7

Release history Release notifications | RSS feed

0.6.0

2 release files

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page