让 pytest 对每个测试进行 运行 设置和拆卸(来自 nose)

Getting pytest to run setup and teardown for every test (coming from nose)

如何在每个测试中制作此测试套件(见下文)运行 setupteardown

import system

def setup():
    system.bootstrap()  # create vanilla installation.

def teardown():
    system.reset()  # reset installation.

def test01():
    # <-- expects setup()
    system.create_user('bob')
    assert 'bob' in system.directory
    # <-- expects teardown() even when the assertion fails.

def test02():
    # <-- expects setup()
    system.create_user('jane')
    assert 'jane' in system.directory
    # <-- expects teardown() even when the assertion fails.

我确定 答案很接近,我只是无法在 windows-11 上的 VScode 中使用它。 我查看了文档中的 how to implement xunit-style set-up,但未传递任何函数。测试非常functional.

我看到的是 test01 运行s 带有 setupteardown,但 test02 没有。

我的心智模型缺少什么?

在写问题时,我发现如果我将它们重命名为 setup_functionteardown_function.

pytest 会运行设置和拆卸

不需要参数。

import system


def setup_function():
    system.bootstrap()  # create vanilla installation.

def teardown_function():
    system.reset()  # reset installation.

def test01():
    # <-- expects setup()
    system.create_user('bob')
    assert 'bob' in system.directory
    # <-- expects teardown() even when the assertion fails.

def test02():
    # <-- expects setup()
    system.create_user('jane')
    assert 'jane' in system.directory
    # <-- expects teardown() even when the assertion fails.

windows11 上的 pytest。Python3.9.10。测试 7.0.1

虽然您的解决方案有效,但我建议使用 pytest fixture --

import system

@pytest.fixture(autouse=True)
def handle_system():
    system.bootstrap()
    yield
    system.reset()