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 3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pytest-pop-3.tar.gz | 8.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pytest_pop-3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.3 kB
Release files / pytest-pop-3.tar.gz
| Download URL | pytest-pop-3.tar.gz |
|---|---|
| Size | 8.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
894496d129b48683b91dda3f1fd08d92b81438c21191662b661e1e56bbc516dd
|
|
BLAKE2b-256 checksum How to use checksums |
1a76fa5883c166f3d889056c6a19b44f22f31af7f7aefbc63d6cd33e65a371e0
|
| 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-3-py3-none-any.whl
| Download URL | pytest_pop-3-py3-none-any.whl |
|---|---|
| Size | 2.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
89cd727a9a9060fde348a5706213f160b9ae3ad840c756fc4d6e90ab39115785
|
|
BLAKE2b-256 checksum How to use checksums |
376fe2ac411255757cd74d4a3881cdac6b45090f016246360e0f1576a8301968
|
| 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 3
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.