'Pytest override fixture with parameterization

The answer to how to override a fixture with parametrization is already given here: pytest test parameterization override

My question is what is the correct way to run the same test, both with the original fixture and the overridden values.

I'm already using the pytest-lazy-fixture library to override one fixture with another, but when I run the following pytest:

import pytest
from pytest_lazyfixture import lazy_fixture

@pytest.fixture
def fixture_value():
    return 0

def test_foo(fixture_value):
    ...

@pytest.mark.parametrize('fixture_value', (lazy_fixture('fixture_value'), 1, 2, 3))
def test_bar(fixture_value):
    ...

I get this error:

E recursive dependency involving fixture 'fixture_value' detected



Solution 1:[1]

The error is because fixture_value name of the fixture is same as the paramter passed to the test.

import pytest
from pytest_lazyfixture import lazy_fixture

@pytest.fixture
def fixture_value():
    return 0



def test_foo(fixture_value):
    assert True

@pytest.mark.parametrize('fixtures_value'[(pytest.lazy_fixture('fixture_value'))]) # Square brackets used here.
def test_bar(fixtures_value): # Note the name here is changed.
    assert True

Output:

Platform win32 -- Python 3.9.2, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
plugins: lazy-fixture-0.6.3
collected 2 items

myso_test.py::test_foo PASSED
myso_test.py::test_bar[fixtures_value0] PASSED

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1