pytest标记使用
1、参数化-pytest.mark.parametrize
import pytest
class Test_01(object):
@pytest.mark.parametrize("a,b", [(3, 6),(2,4)])
def test_a(self, a,b):
print("类内部的测试a函数")
print(a,b)
assert 1
if __name__ == '__main__':
pytest.main(["-s","test_01.py"])
- argnames –用逗号分隔的字符串,表示一个或多个参数名称,或参数字符串的列表/元组。
- argvalues – argvalues列表确定使用不同参数值调用测试的频率。如果仅指定了一个argname,则argvalues是值的列表。如果指定了N个argname,则argvalues必须是N个元组的列表,其中每个元组元素都为其各自的argname指定一个值。
例子:
@pytest.mark.parametrize(("a","b"), [(3, 6),(2,4)])
@pytest.mark.parametrize("a,b", [(3, 6),(2,4)])
@pytest.mark.parametrize("a", [3,6])
...
2、跳过-@pytest.mark.skip
- 无条件跳过标记的函数
class Test_01(object):
def test_a(self):
print("------测试A函数---------")
assert 1
@pytest.mark.skip(reason="没实现,暂时跳过")
def test_b(self):
print("------测试B函数---------")
assert 1
if __name__ == '__main__':
pytest.main(["-s", "test_01.py"])
3、条件成立跳过-@pytest.mark.skipif
- 条件成立时,跳过标记的函数
import pytest
class Test_01(object):
def test_a(self):
print("------测试A函数---------")
assert 1
@pytest.mark.skipif(1 < 2, reason="没实现,暂时跳过")
def test_b(self):
print("------测试B函数---------")
assert 1
if __name__ == '__main__':
pytest.main(["-s", "test_01.py"])
4、标记失败-pytest.mark.xfail
(condition=None, ***, reason=None, raises=None, run=True, strict=False)
- condition (bool or str) –将测试函数标记为xfail(真/假或条件字符串)。
- reason (str) – 测试函数标记为xfail的原因。
- raises (Exception) – 期望由测试函数引发的异常子类;其他异常将无法通过测试。
- run (bool) –测试功能是否应该实际执行。如果为
False
,则该函数将始终xfail且不会执行(如果一个函数存在段错误,则很有用) - strict (bool)
- 如果是
False
(默认值),则该功能将在终端输出中显示,xfailed
好像它失败了,xpass
好像通过了一样。在两种情况下,这都不会导致测试套件整体失败。这对于标记片状测试(随机失败的测试)以供日后处理特别有用。 - 如果为
True
,则该函数将在终端输出中显示为xfailed
好像失败,但是如果意外通过,则它将使测试套件失败。这对于标记始终失败的功能特别有用,并且如果它们意外开始通过,则应该有明确的指示(例如,新版本的库修复了已知的错误)。
- 如果是