Hi,
The example below seems to always lead to the same tests execution order, in both pytest 2, 3, and 4. However the order is counter intuitive:
import pytest
@pytest.fixture(params=[(1, 2), (3, 4)], ids=str)
def arg1_arg2_root(request):
return request.param
@pytest.fixture
def arg1(arg1_arg2_root):
return arg1_arg2_root[0]
@pytest.fixture
def arg2(arg1_arg2_root):
return arg1_arg2_root[1]
@pytest.fixture(params=[5, 6])
def arg3(request):
return request.param
def test_order(arg1, arg2, arg3):
pass
leads to
<..>::test_order[5-(1, 2)]
<..>::test_order[5-(3, 4)]
<..>::test_order[6-(1, 2)]
<..>::test_order[6-(3, 4)]
However it seems counter-intuitive to me. Indeed all the fixtures are function-scopes fixtures, and the function uses arg1 (so, arg1_arg2_root) first, then arg2 (same root), then arg3. I would therefore expect:
<..>::test_order[(1, 2)-5]
<..>::test_order[(1, 2)-6]
<..>::test_order[(3, 4)-5]
<..>::test_order[(3, 4)-6]
Do you agree ? If so that's maybe a bug happening when the fixture closure is computed?
Hi,
The example below seems to always lead to the same tests execution order, in both pytest 2, 3, and 4. However the order is counter intuitive:
leads to
However it seems counter-intuitive to me. Indeed all the fixtures are function-scopes fixtures, and the function uses
arg1(so,arg1_arg2_root) first, thenarg2(same root), thenarg3. I would therefore expect:Do you agree ? If so that's maybe a bug happening when the fixture closure is computed?