[Pytest-commit] Issue #634: metafunc.parametrize overwrites scope (hpk42/pytest)
Nikolaus Rath
issues-reply at bitbucket.org
Thu Nov 27 22:45:21 CET 2014
New issue 634: metafunc.parametrize overwrites scope
https://bitbucket.org/hpk42/pytest/issue/634/metafuncparametrize-overwrites-scope
Nikolaus Rath:
According to http://pytest.org/latest/parametrize.html#the-metafunc-object, the `scope` parameter overrides the fixture scope *if specified*. But in practice, the fixture scope seems to be ignored even if no `scope` parameter is passed to `metafunc.parametrize`. Example:
```
#!python
$ cat test_me.py
#!/usr/bin/env python3
import pytest
import logging
log = logging.getLogger(__name__)
@pytest.fixture(scope='module')
def foo(request):
print('preparing foo-%d' % request.param)
return 'foo-%d' % request.param
def test_one(foo):
print(foo)
def test_two(foo):
print(foo)
test_two.test_with = (2,3)
def pytest_generate_tests(metafunc):
params = list(range(4))
if not 'foo' in metafunc.fixturenames:
return
test_with = getattr(metafunc.function, 'test_with', None)
if test_with:
params = test_with
metafunc.parametrize("foo", params, indirect=True)
$ py.test-3 test_me.py -v -s
============================= test session starts =============================
platform linux -- Python 3.4.2 -- py-1.4.25 -- pytest-2.6.3 -- /usr/bin/python3
plugins: capturelog, ordering
collected 6 items
test_me.py::test_one[0] preparing foo-0
foo-0
PASSED
test_me.py::test_one[1] preparing foo-1
foo-1
PASSED
test_me.py::test_one[2] preparing foo-2
foo-2
PASSED
test_me.py::test_one[3] preparing foo-3
foo-3
PASSED
test_me.py::test_two[2] preparing foo-2
foo-2
PASSED
test_me.py::test_two[3] preparing foo-3
foo-3
PASSED
========================== 6 passed in 0.01 seconds ===========================
```
Note how the fixture is called multiple times for the same parameter.
More information about the pytest-commit
mailing list