Skip to main content

Topological sorting for pytest

Project description

Install

pip install pytest-topo

The pytest-topo library offers a topological ordering feature for pytest tests, ensuring that dependent tests are run in the correct sequence. This is particularly useful for integration testing libraries that use pytest for orchestration.

Please note that this library is not recommended for unit tests, as unit tests should ideally be independent of each other.

Usage Examples

To sequence your tests, apply the dependency and depends_on markers.

import pytest

@pytest.mark.dependency("One")
def test_one():
    # This test is executed first

@pytest.mark.depends_on("Two")
def test_three():
    # This test is executed third

@pytest.mark.depends_on("One")
@pytest.mark.dependency("Two")
def test_two():
    # This test is executed second

A test will be skipped if any of their dependencies do not pass. This will also skip any fixture creation if there are no remaining tests that need to use them.

import pytest

@pytest.mark.dependency("Fail")
def test_one():
    assert False  # force a failure

@pytest.fixture(scope="function")
def my_fixture():
    # This fixture is never created

@pytest.mark.depends_on("Fail")
def test_two(my_fixture):
    # This test will be skipped

Motivation

Consider software where customers register with an account API, and submit purchases to a purchases API. These are two services with API tests that could look like this:

tests
  - account
    - test_create_and_delete
    - ...
  - purchases
    - test_make_purchase
    - ...

The purchases tests may run a pre-test setup to create an account, execute tests, then run a post-test teardown. If there is an issue in the account creation or deletion, all these tests will error. By adding dependency links, the purchases tests will be skipped, reducing test failure noise.

Parallel tests

There is some support for operating with pytest-xdist. When using the --dist loadgroup option, groups of connected tests will register as independent load groups. For example, when running the following tests with pytest-xdist installed and with the command pytest -n 2 --dist loadgroup, it will run two workers in parallel:

import pytest

@pytest.mark.dependency("A-1")
def test_a_one():
    # Runs on worker A

@pytest.mark.depends_on("A-1")
def test_a_two():
    # Runs on worker A

@pytest.mark.dependency("B-1")
def test_b_one():
    # Runs on worker B

@pytest.mark.depends_on("B-1")
def test_b_two():
    # Runs on worker B

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_topo-1.1.0.tar.gz (5.0 kB view details)

Uploaded Source

Built Distribution

pytest_topo-1.1.0-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file pytest_topo-1.1.0.tar.gz.

File metadata

  • Download URL: pytest_topo-1.1.0.tar.gz
  • Upload date:
  • Size: 5.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pytest_topo-1.1.0.tar.gz
Algorithm Hash digest
SHA256 5edd6aba07c7b5b5f572245117393bfd68d7b57af943096d8c04494321f29be1
MD5 a3e7c641ddccabd48423597b00098dd4
BLAKE2b-256 27727edab469b335951704e1bc8fd7475431429464191c6d12adbbff6d4a9b43

See more details on using hashes here.

File details

Details for the file pytest_topo-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: pytest_topo-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pytest_topo-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8a2afdc05a01483d37242ffe7c728908d85c29329c14fb08bb6fae0d46922e2f
MD5 8a6bbd5f602efd201ef0834fb5fe2da8
BLAKE2b-256 2c82f5eacad71d6049bae7d2fc1daac29a8bd47a92b0becfa8782f13e3ed70f7

See more details on using hashes here.

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