Skip to content

metafunc.parametrize overwrites scope #634

Closed
@pytestbot

Description

@pytestbot

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.


Metadata

Metadata

Assignees

No one assigned

    Labels

    topic: parametrizerelated to @pytest.mark.parametrizetype: bugproblem that needs to be addressed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions