From c4623939afb147be75ffe586b04168a5a35506c9 Mon Sep 17 00:00:00 2001 From: Anatoly Bubenkov Date: Sun, 1 Mar 2015 15:15:37 +0100 Subject: [PATCH] support override of the parametrized fixture on the test level --HG-- branch : parametrized-fixture-override --- _pytest/python.py | 9 ++++++--- testing/python/collect.py | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/_pytest/python.py b/_pytest/python.py index 06d8ec6e0..e834b81b4 100644 --- a/_pytest/python.py +++ b/_pytest/python.py @@ -1716,9 +1716,12 @@ class FixtureManager: continue # will raise FixtureLookupError at setup time for fixturedef in faclist[-1:]: if fixturedef.params is not None: - metafunc.parametrize(argname, fixturedef.params, - indirect=True, scope=fixturedef.scope, - ids=fixturedef.ids) + func_params = getattr(getattr(metafunc.function, 'parametrize', None), 'args', [[None]]) + # skip directly parametrized arguments + if argname not in func_params and argname not in func_params[0]: + metafunc.parametrize(argname, fixturedef.params, + indirect=True, scope=fixturedef.scope, + ids=fixturedef.ids) def pytest_collection_modifyitems(self, items): # separate parametrized setups diff --git a/testing/python/collect.py b/testing/python/collect.py index 15ff2b62b..39c8166aa 100644 --- a/testing/python/collect.py +++ b/testing/python/collect.py @@ -401,6 +401,23 @@ class TestFunction: rec.assertoutcome(passed=1) + def test_parametrize_overrides_parametrized_fixture(self, testdir): + """Test parametrization when parameter overrides existing parametrized fixture with same name.""" + testdir.makepyfile(""" + import pytest + + @pytest.fixture(params=[1, 2]) + def value(request): + return request.param + + @pytest.mark.parametrize('value', + ['overrided']) + def test_overrided_via_param(value): + assert value == 'overrided' + """) + rec = testdir.inline_run() + rec.assertoutcome(passed=1) + def test_parametrize_with_mark(selfself, testdir): items = testdir.getitems(""" import pytest