我在conftest.py中遇到问题

@pytest.fixture(scope="function", autouse=True)
@pytest.mark.usefixtures
def pause_on_assert():
    yield
    if hasattr(sys, 'last_value') and isinstance(sys.last_value, AssertionError):
        tkinter.messagebox.showinfo(sys.last_value)

与此类似,conftest.py中还有许多其他约束,作用域为sessionmodule
我的测试用例看起来像这样
test.py
@pytest.fixture(scope="function", autouse=True)
def _wrapper:
    print("pre condition")
    yield
    print("post condition")

def test_abc():
    assert 1==0

问题是我想让conftest.py中的夹具在测试用例中的夹具的yield之前运行

如何更改治具的执行顺序

最佳答案

如果要确保在测试功能之后但在所有固定装置拆除之前运行一段代码,我建议改为使用 pytest_runtest_teardown 钩子(Hook)。将pause_on_assert中的conftest.py固定装置替换为:

def pytest_runtest_teardown(item, nextitem):
    if hasattr(sys, 'last_value') and isinstance(sys.last_value, AssertionError):
        tkinter.messagebox.showinfo(sys.last_value)

关于python - 更改在pytest中调用固定装置的方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59391029/

10-09 07:51