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