Skip to main content

A Python package for managing test dependencies in pytest.

Project description

PyPI version Python Development Status Maintenance PyPI License


pytest-depends-on

An advanced pytest plugin designed for Python projects, offering robust dependency management utilities to enhance the testing workflow.
It allows tests to be skipped based on the execution status of other tests, ensuring that dependent tests do not run if their prerequisites fail or are skipped, resulting in a cleaner and more efficient testing experience.


🚀 Features

  • depends-on: A powerful marker to declare test dependencies. If a parent test fails or hasn't run, the dependent test is automatically skipped.
    • Marker: @pytest.mark.depends_on
    • Arguments:
      • tests (list): A list of parent test names (node IDs) that the current test depends on.
      • status (optional): The expected status of the parent test. Defaults to PASSED. The dependent test will skip if the parent status does not match this value.
      • allowed_not_run (optional): Boolean. If True, the test will not skip if the parent test has not run yet. Defaults to False (skips if parent is missing).

  • Automatic Status Tracking: Automatically tracks the result (passed, failed, skipped, xfailed, xpassed) of every test during the call phase to resolve dependencies dynamically.
  • Opt-in activation: The plugin is inactive by default. Pass --depends-on to enable dependency tracking and skip behaviour.
  • Automatic test reordering: Pass --depends-on-reorder to reorder the collected test suite so parent tests always execute before their dependents — no manual ordering required.

📦 Installation

pip install pytest-depends-on

🔧 Usage

1. Enable the plugin

The plugin is opt-in. Add the flags to your pytest.ini (recommended) or pass them directly on the command line:

[pytest]
addopts =
    --depends-on          # enable dependency tracking and skip behaviour
    --depends-on-reorder  # reorder tests so parents always run first (requires --depends-on)

markers =
    depends_on: mark test as dependent on another test

Or run ad-hoc:

pytest --depends-on --depends-on-reorder

Without --depends-on, all depends_on markers are ignored and every test runs normally.

2. Implement in your tests

Use the marker decorator on your test functions.

Basic Dependency: test_child will only run if test_parent passes.

import pytest

def test_parent():
    assert True

@pytest.mark.depends_on(tests=["test_parent"])
def test_child():
    assert True

Custom Status Dependency: test_child will run only if test_parent fails (useful for testing error handling or recovery).

import pytest

from pytest_depends_on.consts.status import Status

@pytest.mark.depends_on(tests=["test_parent"], status=Status.FAILED)
def test_child():
    pass

Soft Dependency: test_child will run even if test_parent hasn't executed yet (e.g., due to ordering).

import pytest

@pytest.mark.depends_on(tests=["test_parent"], allowed_not_run=True)
def test_child():
    pass

🤝 Contributing

If you have a helpful tool, pattern, or improvement to suggest: Fork the repo
Create a new branch
Submit a pull request
I welcome additions that promote clean, productive, and maintainable development.


🙏 Thanks

Thanks for exploring this repository!
Happy coding!

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_depends_on-2.0.0.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_depends_on-2.0.0-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file pytest_depends_on-2.0.0.tar.gz.

File metadata

  • Download URL: pytest_depends_on-2.0.0.tar.gz
  • Upload date:
  • Size: 7.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytest_depends_on-2.0.0.tar.gz
Algorithm Hash digest
SHA256 ce3f33352d8d47ada8c718c2342dd4450f39bd636d8985b6e586056d79cd38da
MD5 5211c09873a20788672791a5cfb5e93b
BLAKE2b-256 b43afb854edc752381e57b08f81dd0d325e124d6c61d595bb1beea4e4b24949b

See more details on using hashes here.

File details

Details for the file pytest_depends_on-2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_depends_on-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a0241a4bf4b81af7f8ad59900bef065bce55e794fde08cddea47075fc264f111
MD5 7b7fcf79d912a1b6e29460eaf11d0617
BLAKE2b-256 a44a04034789eef0656ed309e7d50c098125d9347fee8d52bce5aa27dccb9cb2

See more details on using hashes here.

Supported by

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