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
[email protected]
https://mail.python.org/mailman/listinfo/pytest-commit