我最低限度地使用pytest作为通用测试运行器,用于针对工作中的各种API产品进行大型自动化集成测试,并且我一直试图找到一个同样通用的拆卸功能示例,该功能在完成任何测试后运行,无论成败,都是如此。
我的典型使用模式是超线性的,通常是这样的:
def test_1():
<logic>
assert something
def test_2():
<logic>
assert something
def test_3():
<logic>
assert something
偶尔,当这样做有意义时,在我的脚本顶部,我将设置为&#34; True&#34;的autouse参数放入设置夹具中。在每个脚本的启动时运行:
@pytest.fixture(scope="session", autouse=True)
def setup_something():
testhelper = TestHelper
testhelper.create_something(host="somehost", channel="somechannel")
def test_1():
<logic>
assert something
def test_2():
<logic>
assert something
def test_3():
<logic>
assert something
直到最近,一次性码头工具环境让我逃脱了整个拆解过程,但我现在有点紧张,其中一个不可用。理想情况下,如果不转移我已经使用过的相同线性模式,我将如何实现另一个类似于以下内容的pytest工具:
@pytest.fixture
def teardown():
testhelper = TestHelper
testhelper.delete_something(thing=something)
运行完成后?
答案 0 :(得分:2)
每个夹具都可能有一个拆卸部分:
@pytest.fixture
def something(request):
# setup code
def finalize():
# teardown code
request.addfinalizer(finalize)
return fixture_result
或者我通常使用它:
@pytest.fixture
def something():
# setup code
yield fixture_result
# teardown code
请注意,在pytest pre-3.0中,后一个成语所需的装饰器是@pytest.yield_fixture
。但是,从3.0开始,可以使用常规@pytest.fixture
装饰器,@pytest.yield_fixture
为deprecated。
查看更多here
答案 1 :(得分:0)
您可以在conftest.py
def pytest_runtest_setup(item):
pass
def pytest_runtest_teardown(item):
pass
请参阅here了解文档