A pytest plugin to deselect tests based on a condition without the tests being included in the skipped report count. This makes it easier use the Cartesian product of two different usages of pytest.mark.parametrize where you want to disable a specific combination. Based off the implementation in this pytest issue comment.
If you don't want the tests to be included in the test count at all, check out the pytest-uncollect-if plugin which will remove the tests silently without them appearing in skipped, collected or deselected.
This pytest plugin was generated with Cookiecutter along with @hackebrot's cookiecutter-pytest-plugin template.
- pytest > 6.2.0
For development requirements, run
pip install -r requirements-dev.txt
You can install "pytest-deselect-if" via pip from PyPI
pip install pytest-deselect-if
If you do not have autoload enabled, add the plugin to your top-level conftest.py
pytest_plugins = ("pytest_deselect_if.plugin",)
The marker takes a single argument func
which accepts parameters as **kwargs
and returns a boolean value. If the return value is True
, the test will be deselected.
To avoid fragile statements that fail on extra parameters, be sure to add **kwargs
to your function signature.
param1_decorator = pytest.mark.parametrize("param1", [1, 2, 3, 4])
param2_decorator = pytest.mark.parametrize("param2", [1, 2, 3, 4])
# deselect if param and param2 are equal
@pytest.mark.deselect_if(func=lambda param1, param2, **kwargs: param1 == param2)
def test_deselect_if(param1, param2):
assert param != param2
A typed alias for pytest.mark.deselect_if
is available as deselect_if
from pytest_deselect_if import deselect_if
param1_decorator = pytest.mark.parametrize("param1", [1, 2, 3, 4])
param2_decorator = pytest.mark.parametrize("param2", [1, 2, 3, 4])
# deselect if param and param2 are equal
@deselect_if(func=lambda param1, param2, **kwargs: param1 == param2)
def test_deselect_if(param1, param2):
assert param != param2
Contributions are very welcome. Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.
Distributed under the terms of the MIT license, "pytest-deselect-if" is free and open source software
If you encounter any problems, please file an issue along with a detailed description.