[TIP] both naming a parameter and showing its values
dpb dpb
dpb.mediamath at gmail.com
Sun Mar 22 19:53:23 PDT 2015
The way the ids parameter of parametrize currently works, we have the
choice either to show the actual argument values, one by one, or else a
string assigned to parameters as a whole:
import pytest
>
> @pytest.mark.parametrize('a', range(3))
> def test_funcs_without_name(a):
> assert a ** 3 == a * (a ** 2)
> @pytest.mark.parametrize('a', range(3), ids=['value of a'] * 3)
> def test_funcs_with_name(a):
> assert a ** 3 == a * (a ** 2)
>
> $ py.test params/demo_ids.py -v
> ============================= test session starts
> ==============================
> platform darwin -- Python 3.4.1 -- py-1.4.25 -- pytest-2.6.3 -- ...
> collected 6 items
> params/demo_ids.py::test_funcs_without_name[0] PASSED
> params/demo_ids.py::test_funcs_without_name[1] PASSED
> params/demo_ids.py::test_funcs_without_name[2] PASSED
> params/demo_ids.py::test_funcs_with_name[value of a] PASSED
> params/demo_ids.py::test_funcs_with_name[value of a] PASSED
> params/demo_ids.py::test_funcs_with_name[value of a] PASSED
> =========================== 6 passed in 0.02 seconds
> ===========================
> $
If I want to show both the value of each argument and its name, I can do
something like this:
def fn(n):
> return range(n)
>
> @pytest.mark.parametrize('a', fn(3), ids=['a: {}'.format(i) for i in
> fn(3)])
> def test_funcs_with_naming_func(a):
> assert a ** 3 == a * (a ** 2)
> params/demo_ids.py::test_funcs_with_naming_func[a: 0] PASSED
> params/demo_ids.py::test_funcs_with_naming_func[a: 1] PASSED
> params/demo_ids.py::test_funcs_with_naming_func[a: 2] PASSED
I can see to it that neither the argnames nor the argvalues appear more
than once in the set of parameters to pytest.markparametrize.
def params(n):
fn = range(n)
return {{'name': 'a', 'args': fn, 'ids': ['a: {}'.format(i) for i in
> fn]}
> named_args = params(3)
> @pytest.mark.parametrize(named_args['name'], pairs['args'], ids=pairs
> ['ids'])
> def test_funcs_with_naming_func(a):
> assert a ** 3 == a * (a ** 2)
But I wonder if there is a more compact way to accomplish this within
Pytest itself, without the separate function
Thanks for your time.
- dpb
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20150322/f4631376/attachment.htm>
More information about the testing-in-python
mailing list