Closed
Description
Originally reported by: Nikolaus Rath (BitBucket: nikratio, GitHub: nikratio)
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.