添加自定义 pytest 标记以根据输入跳过测试

Adding custom pytest marker to skip test based on input

我想添加一个自定义 pytest 标记,只要在目录中找到特定文件,它就会跳过测试:

@pytest.mark.file_exists("my_file.txt")
def test_mytest():
    assert True

我希望test_mytest仅在“my_file.txt”位于根目录时执行。该文档指定了如何注册自定义标记,但没有指定如何定义其行为。我将如何定义 file_exists 的行为? 感谢任何帮助。

逻辑必须在pytest_runtest_setup中实现,您还必须在pytest_configure中声明,例如。有关详细信息,请查看 https://docs.pytest.org/en/stable/how-to/mark.html:

conftest.py

from pathlib import Path

import pytest


def pytest_configure(config):
    config.addinivalue_line("markers", "file_exists(filename): description")


def pytest_runtest_setup(item):
    filenames = [mark.args[0] for mark in item.iter_markers(name="file_exists")]
    package_dir = Path(__file__).parent

    for filename in filenames:
        path = package_dir / filename
        if not path.is_file():
            pytest.skip("test requires {!r}".format(filename))
            return