前言
从这篇开始,逐一解决fixture
是啥?mark
是啥?参数request
是啥?钩子函数是啥?parametrize
参数化是啥?这些问题。本片先介绍一下mark
是啥?以及如何使用
Markers有啥用?
当使用 Pytest 运行测试时,可以通过标记(Markers)来为测试函数或类添加自定义的元数据。标记可以用于对测试进行分类、过滤和定制化。
查看所有Markers
pytest --markers
常用的内置标记
内置标记(Built-in Markers): Pytest 提供了一些内置的标记,用于常见的测试场景。一些常用的内置标记包括:
@pytest.mark.skip
: 标记该测试为跳过;@pytest.mark.parametrize
: 标记该测试使用参数化,可以为测试函数指定多组参数;@pytest.mark.xfail
: 标记该测试为预期失败;@pytest.mark.skipif
: 根据条件动态地跳过某个测试。@pytest.mark.timeout
:为测试用例设置运行超时时间。
@pytest.mark.skip
可以设置一个可选参数reason,表明跳过的原因
import pytest
@pytest.mark.skip()
def test_01():
pass
未增加跳过原因,输出内容为
test_demo.py::test_01 SKIPPED (unconditional skip) [100%]
Skipped: unconditional skip
我们增加跳过原因,看看输出结果
import pytest
@pytest.mark.skip(reason='skip reason')
def test_01():
pass
执行输出结果如下
test_demo.py::test_01 SKIPPED (skip reason) [100%] Skipped: skip reason
可以看到会直接显示具体原因。
pytest.skip
方法
这里我们顺带提一下这个方法。可以在测试执行期间强制跳过
def test_01():
pytest.skip(reason="skip reason")
另外,还可以为其设置一个布尔型的参数allow_module_level(默认为False),表明是否允许在模块中调用这种方法,如果置为True,则跳过模块中剩余的部分,也就是说其值为True时这个模块中所有测试方法都被跳过。
import sys
import pytest
if not sys.platform.startswith("darwin"):
pytest.skip("如果不是mac,跳过",allow_module_level = True)
注意:如果是在用例中设置allow_module_level为True,并不会跳过模块中剩余的用例
@pytest.mark.skipif
带条件的跳过执行:满足条件就跳过,不满足条件就不跳过
import pytest
env = 'iOS'
@pytest.mark.skipif('env == "iOS"', reason="iOS不支持")
def test_01():
pass
当然也可以使用多条标记
import pytest
import sys
env = 'iOS1'
@pytest.mark.skipif('env == "iOS"', reason="iOS不支持")
@pytest.mark.skipif(sys.version_info