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

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

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

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

回答1

逻辑必须在 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