Skip to content

Commit

Permalink
Merge pull request #2819 from leezu/fix_kwargs_fixtures
Browse files Browse the repository at this point in the history
Fix pytest.parametrize when argnames are specified as kwarg
  • Loading branch information
RonnyPfannschmidt authored Oct 9, 2017
2 parents 761d552 + e86ba41 commit 46e3043
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 2 deletions.
9 changes: 7 additions & 2 deletions _pytest/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -1037,9 +1037,14 @@ def pytest_generate_tests(self, metafunc):
if faclist:
fixturedef = faclist[-1]
if fixturedef.params is not None:
func_params = getattr(getattr(metafunc.function, 'parametrize', None), 'args', [[None]])
parametrize_func = getattr(metafunc.function, 'parametrize', None)
func_params = getattr(parametrize_func, 'args', [[None]])
func_kwargs = getattr(parametrize_func, 'kwargs', {})
# skip directly parametrized arguments
argnames = func_params[0]
if "argnames" in func_kwargs:
argnames = parametrize_func.kwargs["argnames"]
else:
argnames = func_params[0]
if not isinstance(argnames, (tuple, list)):
argnames = [x.strip() for x in argnames.split(",") if x.strip()]
if argname not in func_params and argname not in argnames:
Expand Down
1 change: 1 addition & 0 deletions changelog/2819.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix issue with @pytest.parametrize if argnames was specified as kwarg.
18 changes: 18 additions & 0 deletions testing/test_mark.py
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,24 @@ def test_func(foo, bar):
])


def test_parametrized_with_kwargs(testdir):
"""Test collect parametrized func with wrong number of args."""
py_file = testdir.makepyfile("""
import pytest
@pytest.fixture(params=[1,2])
def a(request):
return request.param
@pytest.mark.parametrize(argnames='b', argvalues=[1, 2])
def test_func(a, b):
pass
""")

result = testdir.runpytest(py_file)
assert(result.ret == 0)


class TestFunctional(object):

def test_mark_per_function(self, testdir):
Expand Down

0 comments on commit 46e3043

Please sign in to comment.