我在 pytest 中有一个测试,并添加了一些标记,例如:’ ‘。’@pytest.mark.xfail
‘,测试有几个夹具方法,如何使用夹具方法获得某个测试的所有标记?
解决方案:
可以从 fixture 请求中获取标记。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
这就是输出。
...
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
更新:按照@hoefling的建议,使用正确的公共调用来获取标记。