Skip to content

Commit c462393

Browse files
committed
support override of the parametrized fixture on the test level
--HG-- branch : parametrized-fixture-override
1 parent 0606093 commit c462393

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

_pytest/python.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -1716,9 +1716,12 @@ def pytest_generate_tests(self, metafunc):
17161716
continue # will raise FixtureLookupError at setup time
17171717
for fixturedef in faclist[-1:]:
17181718
if fixturedef.params is not None:
1719-
metafunc.parametrize(argname, fixturedef.params,
1720-
indirect=True, scope=fixturedef.scope,
1721-
ids=fixturedef.ids)
1719+
func_params = getattr(getattr(metafunc.function, 'parametrize', None), 'args', [[None]])
1720+
# skip directly parametrized arguments
1721+
if argname not in func_params and argname not in func_params[0]:
1722+
metafunc.parametrize(argname, fixturedef.params,
1723+
indirect=True, scope=fixturedef.scope,
1724+
ids=fixturedef.ids)
17221725

17231726
def pytest_collection_modifyitems(self, items):
17241727
# separate parametrized setups

testing/python/collect.py

+17
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,23 @@ def test_overrided_via_param(value):
401401
rec.assertoutcome(passed=1)
402402

403403

404+
def test_parametrize_overrides_parametrized_fixture(self, testdir):
405+
"""Test parametrization when parameter overrides existing parametrized fixture with same name."""
406+
testdir.makepyfile("""
407+
import pytest
408+
409+
@pytest.fixture(params=[1, 2])
410+
def value(request):
411+
return request.param
412+
413+
@pytest.mark.parametrize('value',
414+
['overrided'])
415+
def test_overrided_via_param(value):
416+
assert value == 'overrided'
417+
""")
418+
rec = testdir.inline_run()
419+
rec.assertoutcome(passed=1)
420+
404421
def test_parametrize_with_mark(selfself, testdir):
405422
items = testdir.getitems("""
406423
import pytest

0 commit comments

Comments
 (0)