如何为pytest命令指定几个标记

Ale*_*lex 5 python pytest

阅读http://doc.pytest.org/en/latest/example/markers.html我看到了基于标记包含或排除某些 python 测试的示例。

包含:

pytest -v -m webtest
Run Code Online (Sandbox Code Playgroud)

不包括:

pytest -v -m "not webtest"
Run Code Online (Sandbox Code Playgroud)

如果我想为包含和排除指定多个标记怎么办?

hoe*_*ing 7

使用and/or组合多个标记,与-k选择器相同。示例测试套件:

import pytest


@pytest.mark.foo
def test_spam():
    assert True


@pytest.mark.foo
def test_spam2():
    assert True


@pytest.mark.bar
def test_eggs():
    assert True


@pytest.mark.foo
@pytest.mark.bar
def test_eggs2():
    assert True


def test_bacon():
    assert True
Run Code Online (Sandbox Code Playgroud)

选择所有标记为foo和未标记为的测试bar

$ pytest -q --collect-only -m "foo and not bar"
test_mod.py::test_spam
test_mod.py::test_spam2
Run Code Online (Sandbox Code Playgroud)

选择所有既foo没有标记也没有标记的测试bar

$ pytest -q --collect-only -m "not foo and not bar"
test_mod.py::test_bacon
Run Code Online (Sandbox Code Playgroud)

选择标有以下任何一项的测试foobar

$ pytest -q --collect-only -m "foo or bar"
test_mod.py::test_spam
test_mod.py::test_spam2
test_mod.py::test_eggs
test_mod.py::test_eggs2
Run Code Online (Sandbox Code Playgroud)