Description
What's the problem this feature will solve?
I am the author of next-actions/pytest-mh which is a multihost testing plugin for pytest. We are doing some black magic to dynamically create test fixtures and map them to some custom objects. Some user-focused details are described here but TLDR we are doing this:
@pytest.fixture
def pytest_fixture():
pass
def test_example(client, ldap, pytest_fixture):
pass
In this scenario, client
and ldap
are passed to the test_example by setting it in item.funcargs
in runtest hook to internal objects created per-tests. pytest_fixture
is standard pytest fixture. This works nicely and it is using only public fields (I'm not sure if funcargs is documented, but at the very least it is not prefix with _
).
However, accessing these data from pytest fixture fails, obviously:
@pytest.fixture
def pytest_fixture(client):
pass
def test_example(client, ldap, pytest_fixture):
pass
... because client
is not a registered fixture. I probably could manage that by accessing pytest private stuff, but I'd like to avoid that.
I would like to be able to create and delete fixture (at least function-scoped) inside hooks.
Describe the solution you'd like
Provide API to dynamically register and unregister fixtures from pytest hooks.
Alternative Solutions
Currently, deep and private pytest objects and attributes are required.