如何为其他灯具的每次运行运行灯具一次

时间:2019-01-04 17:22:52

标签: python pytest fixtures

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组测试(对具库1的每次调用都进行了1组测试),但是夹具2对所有3组测试仅运行了一次(至少是我的理解)。我不确定如何使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

1 个答案:

答案 0 :(得分:1)

@pytest.fixture(scope="module")更改为@pytest.fixture(scope="class")@pytest.fixture(scope="function")之类的其他内容。 模块范围是指每个模块运行一次。

来自灯具参数文档:

  

scope –共享此灯具的范围,“功能”之一   (默认),“类”,“模块”,“包”或“会话”。

     

“包装”目前被认为是实验性的。

Pytest documentation on scopes

如果您希望每次调用一个夹具一次,都使夹具1依赖夹具2,并使用相同的作用域。