一.在测试过程中,经常需要测试是否如期抛出预期的异常,以确定异常处理模块生效。
在 pytest 中使用 pytest.raises()
进行异常捕获
# 异常捕获
def test_zero_division_1():
with pytest.raises(ZeroDivisionError):
1 / 0
# 可以捕获异常信息
def test_zero_division_2():
with pytest.raises(ZeroDivisionError) as e:
1 / 0
assert str(e.value) == 'integer division or modulo by zero'
二.标记测试函数
1.显式指定函数名,通过::标记
2.使用模糊匹配,使用-k标识
3.使用pytest.mark在函数上标记,运行时使用pytest -m
三、跳过测试
# test_skip.py
@pytest.mark.skip(reason='out-of-date api')
def test_connect():
pass
Pytest 还支持使用 pytest.mark.skipif
为测试函数指定被忽略的条件。
@pytest.mark.skipif(conn.__version__ < '0.2.0',
reason='not supported until v0.2.0')
def test_api():
pass
四、参数化
当对一个测试函数进行测试时,通常会给函数传递多组参数。参数化测试即每组参数都独立执行一次测试,在pytest中可以使用pytest.mark.parametrize(argnames, argvalues)实现。
# 测试密码长度
@pytest.mark.parametrize('passwd',
['123456',
'abcdefdfs',
'as52345fasdf4'])
def test_passwd_length(passwd):
assert len(passwd) >= 8
# 多参数测试,校验用户密码
@pytest.mark.parametrize('user, pass