首页 > 解决方案 > 可以在 conftest 中进行会话设置而无需在第一次测试中完成设置吗?

问题描述

在我的conftest.py文件中,我有一些看起来像这样的东西:

@pytest.fixture(scope="session", autouse=True)
def do_some_setup():
    val = thing_that_takes_a_few_mins()
    yield val
    other_thing_that_takes_a_few_mins() 

虽然这可行,但设置的所有输出都会作为第一个运行测试的一部分被捕获。这对于功能范围的设置来说很好,但对于基于会话的设置没有意义。

我做错了什么/有没有办法解决这个问题?

标签: pythonpytest

解决方案


您始终可以将代码从会话范围的固定装置移动到预运行挂钩,例如到pytest_sessionstart/ pytest_sessionfinish

# conftest.py

def pytest_sessionstart(session):
    thing_that_takes_a_few_mins()


def pytest_sessionfinish(session, exitstatus):
    other_thing_that_takes_a_few_mins()

请注意,尽管pytest_sessionstart在收集测试之前调用了该钩子,因此如果您需要有关计划在哪些测试中运行的信息thing_that_takes_a_few_mins,该钩子pytest_runtestloop将更适合您。


推荐阅读