pytest.mark 是 pytest 测试框架中的一个功能,它允许你为测试用例和测试夹具(fixtures)添加元数据(或称为“标记”)。这些标记可以用于各种目的,例如选择性地运行特定的测试用例集,跳过某些测试用例,或者为测试用例添加额外的信息。
pytest.mark 主要有以下几种用法:
为测试用例添加标记:
你可以使用 pytest.mark.xxx 装饰器来为特定的测试用例添加标记。这些标记可以在命令行中使用 -m 选项来过滤要运行的测试用例。
python
import pytest
@pytest.mark.slow
def test_something_slow():
# 这个测试用例被标记为 "slow"
pass
然后,在命令行中,你可以使用以下命令来只运行标记为 "slow" 的测试用例:
bash
pytest -m slow
为夹具添加标记:
除了测试用例,你还可以为夹具添加标记。这可以用于控制夹具的作用域(scope)或其他行为。
python
import pytest
@pytest.fixture(scope="module", params=[1, 2])
@pytest.mark.usefixtures
def my_fixture(request):
return request.param
在这个例子中,my_fixture 被标记为 usefixtures,尽管这个标记本身并不改变夹具的行为。但是,你可以自定义 pytest 钩子函数来根据这些标记改变夹具的行为。
跳过测试用例:
pytest.mark.skip 和 pytest.mark.skipif 可以用来跳过某些测试用例。skip 无条件地跳过测试用例,而 skipif 则在满足特定条件时跳过。
python
import pytest
import sys
@pytest.mark.skipif(sys.platform == 'win32', reason="does not run on windows")
def test_on_unix():
# 这个测试用例在 Windows 上会被跳过
pass
预期失败的测试用例:
pytest.mark.xfail 可以用来标记预期会失败的测试用例。这有助于跟踪那些你知道有问题但尚未修复的测试用例。
python
import pytest
@pytest.mark.xfail(reason="bug 123")
def test_function():
# 这个测试用例预期会失败,因为有一个已知的 bug
assert False
使用自定义标记:
你还可以定义自己的标记,并在测试用例或夹具中使用它们。然后,你可以编写自定义的 pytest 钩子函数来处理这些标记。
python
import pytest
@pytest.mark.mycustommark
def test_function():
pass
要处理自定义标记,你需要在 pytest_configure 或其他钩子函数中编写逻辑。
标记是 pytest 一个非常强大的功能,它允许你以灵活的方式组织和控制你的测试套件。通过合理地使用标记,你可以更容易地管理、维护和运行你的测试用例。
标签:标记,python,pytest,mark,测试用例,夹具 From: https://www.cnblogs.com/luckyletop/p/18080327