Pass parameter name to `make_parametrize_id` hook function
This commit is contained in:
parent
88f7befabb
commit
c848d0a771
1
AUTHORS
1
AUTHORS
|
@ -120,6 +120,7 @@ Quentin Pradet
|
||||||
Ralf Schmitt
|
Ralf Schmitt
|
||||||
Raphael Pierzina
|
Raphael Pierzina
|
||||||
Raquel Alegre
|
Raquel Alegre
|
||||||
|
Ravi Chandra
|
||||||
Roberto Polli
|
Roberto Polli
|
||||||
Romain Dorgueil
|
Romain Dorgueil
|
||||||
Roman Bolshakov
|
Roman Bolshakov
|
||||||
|
|
|
@ -79,10 +79,15 @@ Changes
|
||||||
subdirectories with ini configuration files now uses the correct ini file
|
subdirectories with ini configuration files now uses the correct ini file
|
||||||
(`#2148`_). Thanks `@pelme`_.
|
(`#2148`_). Thanks `@pelme`_.
|
||||||
|
|
||||||
|
* Modify ``pytest_make_parametrize_id()`` hook to accept ``argname`` as an
|
||||||
|
additional parameter.
|
||||||
|
Thanks `@unsignedint`_ for the PR.
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
.. _@malinoff: https://github.com/malinoff
|
.. _@malinoff: https://github.com/malinoff
|
||||||
.. _@pelme: https://github.com/pelme
|
.. _@pelme: https://github.com/pelme
|
||||||
|
.. _@unsignedint: https://github.com/unsignedint
|
||||||
|
|
||||||
.. _#2129: https://github.com/pytest-dev/pytest/issues/2129
|
.. _#2129: https://github.com/pytest-dev/pytest/issues/2129
|
||||||
.. _#2148: https://github.com/pytest-dev/pytest/issues/2148
|
.. _#2148: https://github.com/pytest-dev/pytest/issues/2148
|
||||||
|
|
|
@ -157,9 +157,10 @@ def pytest_generate_tests(metafunc):
|
||||||
""" generate (multiple) parametrized calls to a test function."""
|
""" generate (multiple) parametrized calls to a test function."""
|
||||||
|
|
||||||
@hookspec(firstresult=True)
|
@hookspec(firstresult=True)
|
||||||
def pytest_make_parametrize_id(config, val):
|
def pytest_make_parametrize_id(config, val, argname=None):
|
||||||
"""Return a user-friendly string representation of the given ``val`` that will be used
|
"""Return a user-friendly string representation of the given ``val`` that will be used
|
||||||
by @pytest.mark.parametrize calls. Return None if the hook doesn't know about ``val``.
|
by @pytest.mark.parametrize calls. Return None if the hook doesn't know about ``val``.
|
||||||
|
The parameter name is available as ``argname``, if required.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
|
|
|
@ -197,7 +197,7 @@ def pytest_pycollect_makeitem(collector, name, obj):
|
||||||
res = list(collector._genfunctions(name, obj))
|
res = list(collector._genfunctions(name, obj))
|
||||||
outcome.force_result(res)
|
outcome.force_result(res)
|
||||||
|
|
||||||
def pytest_make_parametrize_id(config, val):
|
def pytest_make_parametrize_id(config, val, argname=None):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@ -941,7 +941,8 @@ def _idval(val, argname, idx, idfn, config=None):
|
||||||
return _escape_strings(s)
|
return _escape_strings(s)
|
||||||
|
|
||||||
if config:
|
if config:
|
||||||
hook_id = config.hook.pytest_make_parametrize_id(config=config, val=val)
|
hook_id = config.hook.pytest_make_parametrize_id(
|
||||||
|
config=config, val=val, argname=argname)
|
||||||
if hook_id:
|
if hook_id:
|
||||||
return hook_id
|
return hook_id
|
||||||
|
|
||||||
|
|
|
@ -1455,3 +1455,26 @@ class TestMarkersWithParametrization:
|
||||||
"*test_func*0*PASS*",
|
"*test_func*0*PASS*",
|
||||||
"*test_func*2*PASS*",
|
"*test_func*2*PASS*",
|
||||||
])
|
])
|
||||||
|
|
||||||
|
def test_pytest_make_parametrize_id_with_argname(self, testdir):
|
||||||
|
testdir.makeconftest("""
|
||||||
|
def pytest_make_parametrize_id(config, val, argname):
|
||||||
|
return str(val * 2 if argname == 'x' else val * 10)
|
||||||
|
""")
|
||||||
|
testdir.makepyfile("""
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("x", range(2))
|
||||||
|
def test_func(x):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("y", [1])
|
||||||
|
def test_func2(y):
|
||||||
|
pass
|
||||||
|
""")
|
||||||
|
result = testdir.runpytest("-v")
|
||||||
|
result.stdout.fnmatch_lines([
|
||||||
|
"*test_func*0*PASS*",
|
||||||
|
"*test_func*2*PASS*",
|
||||||
|
"*test_func2*10*PASS*",
|
||||||
|
])
|
||||||
|
|
Loading…
Reference in New Issue