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

Ale*_*lex 5 python pytest

我正在运行测试py.test并希望访问我在命令行上设置的标记。我在每个运行测试使用的夹具(即设置测试的夹具)中尝试了以下代码conftest.py(基于我在此处找到的文档):

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

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

py.test -s -m "set1 or ready"
Run Code Online (Sandbox Code Playgroud)

我得到以下输出

Marker: None
Run Code Online (Sandbox Code Playgroud)

我好像做错了。怎么做才对?

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

hoe*_*ing 8

request.node是测试函数对象,因此request.node.get_closest_marker('set1')返回附加到当前正在执行的测试None的标记,或者如果找不到具有该名称的标记。例如,运行测试

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

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

def test_eggs(basedriver):
    assert True
Run Code Online (Sandbox Code Playgroud)

将打印

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

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

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