To remove fixtures.py::add_funcargs_pseudo_fixture_def and add its logic i.e. registering funcargs as params and making corresponding fixturedefs, right to Metafunc.parametrize in which parametrization takes place. To remove funcargs from metafunc attributes as we populate metafunc params and make pseudo fixturedefs simultaneously and there's no need to keep funcargs separately.
54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
import pprint
|
|
from typing import List
|
|
from typing import Tuple
|
|
|
|
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.fixture(scope="session")
|
|
def checked_order():
|
|
order: List[Tuple[str, str, str]] = []
|
|
|
|
yield order
|
|
pprint.pprint(order)
|
|
assert order == [
|
|
("issue_519.py", "fix1", "arg1v1"),
|
|
("test_one[arg1v1-arg2v1]", "fix2", "arg2v1"),
|
|
("test_one[arg1v1-arg2v2]", "fix2", "arg2v2"),
|
|
("test_two[arg1v1-arg2v1]", "fix2", "arg2v1"),
|
|
("test_two[arg1v1-arg2v2]", "fix2", "arg2v2"),
|
|
("issue_519.py", "fix1", "arg1v2"),
|
|
("test_one[arg1v2-arg2v1]", "fix2", "arg2v1"),
|
|
("test_one[arg1v2-arg2v2]", "fix2", "arg2v2"),
|
|
("test_two[arg1v2-arg2v1]", "fix2", "arg2v1"),
|
|
("test_two[arg1v2-arg2v2]", "fix2", "arg2v2"),
|
|
]
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def fix1(request, arg1, checked_order):
|
|
checked_order.append((request.node.name, "fix1", arg1))
|
|
yield "fix1-" + arg1
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def fix2(request, fix1, arg2, checked_order):
|
|
checked_order.append((request.node.name, "fix2", arg2))
|
|
yield "fix2-" + arg2 + fix1
|
|
|
|
|
|
def test_one(fix2):
|
|
pass
|
|
|
|
|
|
def test_two(fix2):
|
|
pass
|