为Pytest灯具提供不同的测试范围

时间:2018-12-12 18:33:38

标签: pytest fixtures

在我的测试套件中,我具有某些数据生成固定装置,可用于许多参数化测试。其中一些测试希望这些固定装置每个会话仅运行一次,而另一些测试则需要它们运行每个功能。例如,我可能有一个类似于以下的装置:

@pytest.fixture
def get_random_person():
    return random.choice(list_of_people)

和2个参数化测试,每个测试条件要使用同一个人,而每次都希望有一个新人。有什么办法可以使这个夹具在一个测试中具有scope =“ session”而在另一个测试中具有scope =“ function”?

2 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是分离实现,然后让2个不同作用域的灯具返回该实现。像这样:

def _random_person():
    return random.choice(list_of_people)

@pytest.fixture(scope='function')
def get_random_person_function_scope():
    return _random_person()

@pytest.fixture(scope='session')
def get_random_person_session_scope():
    return _random_person()

答案 1 :(得分:0)

James的回答还可以,但是如果您从治具代码中set CONDA_DLL_SEARCH_MODIFICATION_ENABLE=1 则无济于事。这是一种更好的方法:

yield

这样,您仍然可以处理上下文固定装置。

Github问题供参考:https://github.com/pytest-dev/pytest/issues/3425