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
答案 0 :(得分:1)
将@pytest.fixture(scope="module")
更改为@pytest.fixture(scope="class")
或@pytest.fixture(scope="function")
之类的其他内容。
模块范围是指每个模块运行一次。
来自灯具参数文档:
scope –共享此灯具的范围,“功能”之一 (默认),“类”,“模块”,“包”或“会话”。
“包装”目前被认为是实验性的。
Pytest documentation on scopes
如果您希望每次调用一个夹具一次,都使夹具1依赖夹具2,并使用相同的作用域。