首页 > 解决方案 > 如何使用带有限定符测试的 pytest 运行多个测试

问题描述

我有一个 pytest 测试文件的目录,并且有一个需要测试的限定符测试,如果它失败则停止执行任何进一步的测试,但如果它通过则执行所有测试,无论是否通过。我有一个具有以下结构的目录:

tests/
test_qualifier.py
test_one.py
test_two.py
...

现在,当我使用pytest test/ -x它运行测试时,它会运行所有测试,因为它会在第一次失败时停止。我想pytest运行test_qualifier.py,如果它失败则停止进一步执行,但如果它通过则不要停止任何测试是否失败。

标签: pythonpytest

解决方案


您可以使用 pytest-depends 插件。将其他测试标记为依赖于 test_qualifier。

插件页面

这个 pytest 插件允许你声明 pytest 测试之间的依赖关系,如果依赖的测试没有成功,则依赖的测试将不会运行。

当然,测试应该尽可能自包含,但这并不意味着它没有很好的用途。

当一个测试失败意味着另一个测试也不可能成功时,这可能很有用,尤其是对于较慢的测试。这不是测试 A 为测试 B 设置东西的意义上的依赖关系,但更多的是如果测试 A 失败,也没有理由打扰测试 B。

代码示例:

BUILD_PATH = 'build'

def test_build_exists():
    assert os.path.exists(BUILD_PATH)

@pytest.depends(on=['test_build_exists'])
def test_build_version():
    result = subprocess.run([BUILD_PATH, '--version', stdout=subprocess.PIPE)
    assert result.returncode == 0
    assert '1.2.3' in result.stdout

您可以通过使用 pytest 钩子编写自己的 pytest 插件来实现相同的目的。


推荐阅读