Python 仅当使用自定义标记标记测试时,才执行pytest挂钩

Python 仅当使用自定义标记标记测试时,才执行pytest挂钩,python,unit-testing,pytest,Python,Unit Testing,Pytest,因此,我在pytest.ini文件中定义了自定义标记 [pytest] markers = foomark: Mark a test as foo 每当运行标有foomark的测试时,我还需要使用一组特殊的钩子脚本实现来执行该测试,这些钩子脚本实现进入conftest.py def pytest_foo_hook(request): print("This is a foo-marked test.") pytest.ini驻留在项目根目录中。必须将con

因此,我在
pytest.ini
文件中定义了自定义标记

[pytest]
markers =
    foomark: Mark a test as foo
每当运行标有
foomark
的测试时,我还需要使用一组特殊的钩子脚本实现来执行该测试,这些钩子脚本实现进入
conftest.py

def pytest_foo_hook(request):
    print("This is a foo-marked test.")
pytest.ini
驻留在项目根目录中。必须将
conftest.py
放在包含项目测试/测试套件的每个子文件夹中。问题是,用
foomark
标记的测试分布在多个包中,对于每个包,我需要添加钩子实现,从而产生大量样板代码。为所有测试定义钩子脚本也不是一个选项


是否有一种方法可以将标记与一组pytest钩子脚本链接起来,以便仅在已标记为
foomark
的测试上执行?

正如Bremen先生指出并指出的,每个钩子脚本实现中可访问的请求对象都包含调用测试的标记。执行此操作时,仍将对套件的所有测试执行钩子,但它使您能够筛选出具有标记
foomark
的测试。对于我的用例来说,这就足够了。简单的解决方案可能如下所示:

def pytest_foo_hook(request):
    for marker in request.node.iter_markers():
        if marker.name == 'foomark':
            print("This is a foo-marked test.")

难道你不能检查钩子中的标记(使用类似于
request.node.iter\u markers()
)的东西吗?