Skipping Child Fixtures¶
By default, the sub-fixtures in a fixture group are all-or-nothing: if any fixture is used in a test, all fixtures in that group will be used. This means that even if a fixture is not used in a test or any other used fixtures, it will be used in any test that uses any fixture from that group.
my_group = ConcurrentFixtureGroup('my_group')
some_global_state = set()
@my_group.fixture
async def fixture_1():
some_global_state.add('fixture_1')
@my_group.fixture
async def fixture_2():
some_global_state.add('fixture_2')
def test_all_or_nothing(fixture_1):
# fixture_2 is included in this test because its sibling fixture_1 is used.
assert some_global_state == {'fixture_1', 'fixture_2'}
This behaviour can be changed by setting the group’s autoskip to True.
my_group = ConcurrentFixtureGroup('my_group', autoskip=True)
some_global_state = set()
@my_group.fixture
async def fixture_1():
some_global_state.add('fixture_1')
@my_group.fixture
async def fixture_2():
some_global_state.add('fixture_2')
def test_all_or_nothing(fixture_1):
assert some_global_state == {'fixture_1'}
Alternatively, you can set the autoskip of the child fixtures to True.
my_group = ConcurrentFixtureGroup('my_group')
some_global_state = set()
@my_group.fixture
async def fixture_1():
some_global_state.add('fixture_1')
@my_group.fixture(autoskip=True)
async def fixture_2():
some_global_state.add('fixture_2')
def test_all_or_nothing(fixture_1):
assert some_global_state == {'fixture_1'}
This behaviour is disabled by default, to avoid some spooky behaviour.
Spooky Behaviour With Skipping Child Fixtures¶
Note that if a child fixture is skipped, all the fixtures that that fixture uses will not be skipped.
my_group = ConcurrentFixtureGroup('my_group')
some_global_state = set()
@fixture
def some_fixture():
some_global_state.add('some_fixture')
@my_group.fixture
async def fixture_1():
some_global_state.add('fixture_1')
@my_group.fixture(autoskip=False)
async def fixture_2(some_fixture):
some_global_state.add('fixture_2')
def test_all_or_nothing(fixture_1):
# fixture_2 was skipped, but it's dependant- some_fixture, was not skipped.
assert some_global_state == {'some_fixture', 'fixture_1'}