首页 文章

如何在pytest中会话夹具失败时忽略测试

提问于
浏览
1

假设我有一个如下所示的测试:

import pytest
import copy

@pytest.fixture(scope='session')
def session_tool(request):
    tool = request.config.tool
    # Build is the critical part and may fail, raising an exception
    tool.build()
    return tool

@pytest.fixture
def tool(session_tool):
    return copy.deepcopy(session_tool)

def test_tool(tool, args):
    assert tool.run(args) == 0

它构建一个会话范围的工具,然后为每个测试用例创建它的副本 . 但是当构建失败时,会再次为下一个测试用例执行 session_tool fixture,这会再次失败......直到所有测试用例都失败 . 由于有很多测试用例,因此需要一些时间才能完成该过程 .

有没有办法告诉pytest跳过所有在第一次尝试构建失败后使用 session_fixture 的测试?

1 回答

  • 0

    我可以想到两种方法:

    1)调用pytest.skip()将导致跳过测试 . 如果从夹具内部调用它,则可以正常工作 . 在您的情况下,它将导致跳过所有剩余的测试 .

    2)调用pytest.exit()将导致测试套件停止运行,就像触发了KeyboardInterrupt一样 .

相关问题