python pytest - 如何在其固定方法中获取测试标记?

ere*_*rez 3 pytest python-3.x

我在 pytest 中进行了测试,并添加了一些标记,例如:“ @pytest.mark.xfail”,测试有几种固定方法。如何使用夹具方法获取某个测试的所有标记?

MrB*_*men 5

node可以使用从设备请求属性中获取标记iter_markers,如以下(无意义)示例所示:

import pytest


@pytest.fixture
def get_marks(request):
    marks = [m.name for m in request.node.iter_markers()]
    if request.node.parent:
        marks += [m.name for m in request.node.parent.iter_markers()]
    yield marks


@pytest.mark.parametrize('number', [1, 2, 3])
@pytest.mark.foo
@pytest.mark.xfail
def test_marks(get_marks, number):
    print(get_marks)
    assert 'xfail' in get_marks
    assert number == 42
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

...
xfail                                      [100%]['parametrize', 'xfail', 'foo']

get_marks = ['parametrize', 'xfail', 'foo'], number = 3

    @pytest.mark.parametrize('number', [1, 2, 3])
    @pytest.mark.foo
    @pytest.mark.xfail
    def test_marks(get_marks, number):
        print(get_marks)
        assert 'xfail' in get_marks
>       assert number == 42
E       assert 3 == 42
Run Code Online (Sandbox Code Playgroud)

更新:使用正确的公共调用来获取 @hoefling 提议的标记。