[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