New issue 519: fixture scope is ignored when using metafunc.parametrize()
https://bitbucket.org/hpk42/pytest/issue/519/fixture-scope-is-ignored-when-using

Nikolaus Rath:

Please take a look at the following example:


```
#!python

import pytest

def pytest_generate_tests(metafunc):
    if 'arg1' in metafunc.fixturenames:
        metafunc.parametrize("arg1", [ 'arg1v1', 'arg1v2' ], scope='module')

    if 'arg2' in metafunc.fixturenames:
        metafunc.parametrize("arg2", [ 'arg2v1', 'arg2v2' ], scope='function')
        
@pytest.yield_fixture(scope='module')
def fix1(arg1):
    print('running fix1 with', arg1)
    yield 'fix1-' + arg1

@pytest.yield_fixture(scope='function')
def fix2(fix1, arg2):
    print('running fix2 with', fix1, arg2)
    yield 'fix2-' + arg2 + fix1
    
def test_one(fix2):
    assert True

def test_two(fix2):
    assert True
```

As I understand, `test_one` and `test_two` should be executed 4 times each. The 
`fix2` function should be called once for every test execution (because it has 
function scope), and the `fix1` function once for every value of `arg1` 
(because it has module scope).

However, in practice `fix1` seems to be called for every test function as well, 
as if it had function scope:


```
#!text

$ python3 ~/clones/pytest/pytest.py -v -s test_bug.py
============================= test session starts ==============================
platform linux -- Python 3.3.5 -- py-1.4.20 -- pytest-2.6.0.dev1 -- 
/usr/bin/python3
collected 8 items 

test_bug.py@20::test_one[arg1v1-arg2v1] running fix1 with arg1v1
running fix2 with fix1-arg1v1 arg2v1
PASSED
test_bug.py@23::test_two[arg1v1-arg2v1] running fix2 with fix1-arg1v1 arg2v1
PASSED
test_bug.py@20::test_one[arg1v1-arg2v2] running fix1 with arg1v1
running fix2 with fix1-arg1v1 arg2v2
PASSED
test_bug.py@23::test_two[arg1v1-arg2v2] running fix2 with fix1-arg1v1 arg2v2
PASSED
test_bug.py@20::test_one[arg1v2-arg2v1] running fix1 with arg1v2
running fix2 with fix1-arg1v2 arg2v1
PASSED
test_bug.py@23::test_two[arg1v2-arg2v1] running fix2 with fix1-arg1v2 arg2v1
PASSED
test_bug.py@20::test_one[arg1v2-arg2v2] running fix1 with arg1v2
running fix2 with fix1-arg1v2 arg2v2
PASSED
test_bug.py@23::test_two[arg1v2-arg2v2] running fix2 with fix1-arg1v2 arg2v2
PASSED

=========================== 8 passed in 0.01 seconds ===========================
```

Looks like a bug to me.


_______________________________________________
pytest-commit mailing list
pytest-commit@python.org
https://mail.python.org/mailman/listinfo/pytest-commit

Reply via email to