diff --git a/AUTHORS b/AUTHORS index 0caa352f9..dfc0a542e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -10,6 +10,7 @@ Andy Freeland Anthon van der Neut Armin Rigo Aron Curzon +Aviv Palivoda Benjamin Peterson Bob Ippolito Brian Dorsey diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c81f342b0..159504c87 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -25,7 +25,7 @@ * Fix (`#1437`_): When passing in a bytestring regex pattern to parameterize attempt to decode it as utf-8 ignoring errors. -* +* Fix (`#649`_): parametrized test nodes cannot be specified to run on the command line. * @@ -33,6 +33,7 @@ .. _#1437: https://github.com/pytest-dev/pytest/issues/1437 .. _#469: https://github.com/pytest-dev/pytest/issues/469 .. _#1431: https://github.com/pytest-dev/pytest/pull/1431 +.. _#649: https://github.com/pytest-dev/pytest/issues/649 .. _@asottile: https://github.com/asottile diff --git a/_pytest/main.py b/_pytest/main.py index 70d6896cb..8654d7af6 100644 --- a/_pytest/main.py +++ b/_pytest/main.py @@ -718,7 +718,8 @@ class Session(FSCollector): if rep.passed: has_matched = False for x in rep.result: - if x.name == name: + # TODO: remove parametrized workaround once collection structure contains parametrization + if x.name == name or x.name.split("[")[0] == name: resultnodes.extend(self.matchnodes([x], nextnames)) has_matched = True # XXX accept IDs that don't have "()" for class instances diff --git a/testing/test_mark.py b/testing/test_mark.py index 1795928f0..aa1be6f7c 100644 --- a/testing/test_mark.py +++ b/testing/test_mark.py @@ -269,6 +269,22 @@ def test_keyword_option_parametrize(spec, testdir): assert len(passed) == len(passed_result) assert list(passed) == list(passed_result) + +def test_parametrized_collected_from_command_line(testdir): + """Parametrized test not collected if test named specified + in command line issue#649. + """ + py_file = testdir.makepyfile(""" + import pytest + @pytest.mark.parametrize("arg", [None, 1.3, "2-3"]) + def test_func(arg): + pass + """) + file_name = os.path.basename(py_file.strpath) + rec = testdir.inline_run(file_name + "::" + "test_func") + rec.assertoutcome(passed=3) + + class TestFunctional: def test_mark_per_function(self, testdir):