如何在conftest.py中检索py.test的标记?

时间:2018-10-01 06:35:21

标签: python pytest

我正在使用py.test进行测试,并且想访问我在命令行上设置的标记。我已经在conftest.py(基于我发现的文档here)中的以下代码中尝试了每个运行测试所用的固定装置(即用于设置测试的固定装置):

@pytest.fixture
def basedriver(request):
    ...
    node = request.node
    print("Marker: %s" % str(node.get_marker('set1')))
    ...

但是当我如下调用测试时:

py.test -s -m "set1 or ready"

我得到以下输出

Marker: None

我似乎做错了。怎么做对呢?

理想情况下,我可以检索整个字符串,即“ set1或ready” ...

2 个答案:

答案 0 :(得分:2)

request.node是测试函数对象,因此request.node.get_marker('set1')返回附加到当前正在执行的测试的标记。例如,运行测试

@pytest.fixture
def basedriver(request):
    node = request.node
    print('Marker:', node.get_marker('set1'))

@pytest.mark.set1
def test_spam(basedriver):
    assert True

def test_eggs(basedriver):
    assert True

将打印

test_spam.py::test_spam Marker: MarkInfo(_marks=[Mark(name='set1', args=(), kwargs={})])
PASSED
test_spam.py::test_eggs Marker: None
PASSED

您想要的是命令行参数-m的传递值。通过配置夹具访问它:

@pytest.fixture
def basedriver(pytestconfig):
    markers_arg = pytestconfig.getoption('-m')
    print('markers passed from command line:', markers_arg)
    ...

答案 1 :(得分:0)

不幸的是

`request.node.get_marker('set1') `

不再工作。 但是您可以将其更改为:

request.node.get_closest_marker('set1') 

请参阅:

https://docs.pytest.org/en/latest/historical-notes.html#update-marker-code