Skip to main content

PYTEST-POP

A pytest plugin to help with testing pop projects

INSTALLATION

Install with pip:

pip install pytest-pop

DEVELOPMENT INSTALLATION

Clone the pytest-pop repo and install with pip:

git clone https://gitlab.com/saltstack/pop/pytest-pop.git
pip install -e pytest-pop

Getting the Hub

Extend the hub fixture in your conftest.py so that it includes your subs:

# Scoped for session because creating the hub is an expensive process
@pytest.fixture(scope="session")
def hub(hub):
    for dyne in ("exec", "states):
        hub.pop.sub.add(dyne_name=dyne)
    yield hub

The full hub you need is now available everywhere in pytest!

In fixtures:

@pytest.fixture
def my_fixture(hub):
    hub = hub

In modules:

def setup_module(module):
    hub = module.hub

def teardown_module(module):
    hub = module.hub

In functions:

def setup_function(function):
    hub = function.hub

def test_func(hub):
    hub = hub

def teardown_function(function):
    hub = function.hub

In classes:

class TestClass:
    @classmethod
    def setup_class(cls):
        hub = cls.hub

    def test_method(self):
        hub = self.hub

    @classmethod
    def teardown_class(cls):
        hub = cls.hub

Markers

Make use of pytest’s marking functionality

root

Marks a test as needing elevated privileges. On UNIX-like systems the test will be skipped if the user running the tests is not root. On Windows systems the test will be skipped if the tests aren’t run with admin privileges.

Example:

@pytest.mark.root
def test_root(hub):
    pass

expensive

Marks a test as being expensive. Run pytest with the ‘–expensive’ flag or set the EXPENSIVE_TESTS environment variable to “True” to run these tests. By default they will be skipped

Example:

@pytest.mark.expensive
def test_expensive(hub):
    pass

destructive

Marks a test as being destructive. Run pytest with the ‘–destructive’ flag or set the DESTRUCTIVE_TESTS environment variable to “True” to run these tests. By default they will be skipped

Example:

@pytest.mark.destructive
def test_destructive(hub):
    pass

slow

Marks a test as being slow. Run pytest with the ‘–slow’ flag or set the SLOW_TESTS environment variable to “True” to run these tests. By default they will be skipped

Example:

@pytest.mark.slow
def test_slow(hub):
    pass

Logging

You can use the hub to log without setting up a logger in every single file

Example:

hub.log.debug("debug message")

Be sure to run pytest with ‘–cli-log-level=10’ in order to see debug messages

Mocking

Get access to a fully mocked/autospecced version of the hub with:

mock_hub = hub.pop.testing.mock_hub()

Include a fixture like this one in the conftest.py in the root of your unit test directory:

# Scope the mock_hub to a function so that the autospec gets reset after each use.
@pytest.fixture(scope="function")
def mock_hub(hub):
    mock_hub = hub.pop.testing.mock_hub()
    # replace mocked functions with necessary real ones
    # extend this on a per-module or per-function basis if necessary
    mock_hub.log = hub.log
    yield mock_hub

You can now do autospec assertions on contracted functions:

import project.sub.plugin as plugin

def test_cmd_run(mock_hub):
    plugin.func(mock_hub, "arg")
    mock_hub.sub.plugin.func.assert_called_with("arg")

Writing Tests

There’s some boiler plate code that may be useful to get you started in this repo’s test directory.

Metadata

Release files for pytest-pop 4

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-pop 4
File Size Uploaded Provenance
pytest-pop-4.tar.gz 9.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pytest-pop 4
File Interpreter ABI Platform
pytest_pop-4-py3-none-any.whl Python 3 none any Details

Total release size: 11.8 kB

Release files / pytest-pop-4.tar.gz

Download URL pytest-pop-4.tar.gz
Size 9.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9cb814587e36e5f23a6156603900d436bbfc93e8da1099f91b46cf774f3cce8b
BLAKE2b-256 checksum
How to use checksums
791f2c71225fde323c9b11ed4439d073a676ee077b956bd92acf17b97ccbd114
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

Release files / pytest_pop-4-py3-none-any.whl

Download URL pytest_pop-4-py3-none-any.whl
Size 2.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9774594e9819dff33bba740e170fdc557306fa9f20638772fd0160ef3674b37a
BLAKE2b-256 checksum
How to use checksums
62f9a5cab730e2ca5ebaabfc1c5aef1e0d4b2a8b1d597850d3f764c5948e8e76
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

Security for pytest-pop 4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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