我正面临一个pytest fixtures的小问题,非常感谢你的帮助 .
我有一些功能固定装置,如下所述 . 为简单起见,我没有展示实施 .
@pytest.fixture()
def get_driver():
pass
@pytest.fixture()
def login(get_driver):
pass
@pytest.fixture()
def settings(login):
pass
问题是我需要一个( session level )夹具,它在我运行第一个测试用例之前进行设置 . (实际上开始测试) . 即转到设置页面并创建一些设置 . (登录后)
现在的问题是我不能用 session level fixture 这样做,因为我不能在会话级别使用功能级夹具 . or can I?
@pytest.fixture(scope="session")
def setup(settings):
settings.create_settings()
pass
2 回答
您需要使用变通方法 . 该操作需要在
function
范围内完成,并且autouse
设置为True
.您需要在基于
session
的fixture中初始化变量,这将检查settings
是否已完成 . 如果没有完成,那么你将进行设置并将标志更改为False
下面是一个工作示例
输出如下
所以你可以看到设置只发生一次
此解决方法尝试在不创建会话级夹具的情况下实现相同的结果 . 它可以满足您对上面评论中提到的
called only once before first test case
设置的需求 .创建
conftest.py
并放置以下内容:然后,您可以在测试中使用它,如下所示:
执行测试应该产生接近你想要的效果(基于我到目前为止从你给出的信息中推断出的结果) .