如何为每个 运行 其他夹具 运行 夹具一次

How to run fixture once for each run of other fixture

Conftest.py

@pytest.fixture(scope="module")
def fixture2(request):
    do something

@pytest.fixture(scope="session", params=[ 1, 2, 3 ])
def fixture1(request):
    do something else

test_file.py

@pytest.mark.usefixtures('fixture2', 'fixture1')
class TestSomething1(object):
    def test_1(self):
        pass

    def test_2(self):
        pass

@pytest.mark.usefixtures('fixture1')
class TestSomething2(object):
    def test_3(self):
        pass

    def test_4(self):
        pass

我得到了 3 组测试(每次调用 fixture1 一组),但是 fixture2 对于所有 3 组测试只有 运行s 一次(至少这是我的理解)。我不确定如何为 fixture1 的每个 运行 制作一次 运行 (不是每次测试一次)。

我最后做了什么:

@pytest.fixture(scope="module")
def fixture2(request, fixture1):
    do something

@pytest.fixture(scope="session", params=[ 1, 2, 3 ])
def fixture1(request):
    do something else

@pytest.fixture(scope="module") 更改为其他内容,例如 @pytest.fixture(scope="class")@pytest.fixture(scope="function")。 模块作用域意味着它的 运行 每个模块一次。

来自夹具参数文档:

scope – the scope for which this fixture is shared, one of "function" (default), "class", "module", "package" or "session".

"package" is considered experimental at this time.

Pytest documentation on scopes

使 fixture1 依赖于 fixture2 并使用相同的作用域,如果您希望每次调用一个 fixture 时调用另一个 fixture。