执行测试后自动执行某些操作,用到关键字yeild
import smtplib
import pytest
@pytest.fixture(scope="module")
def smtp():
smtp = smtplib.SMTP("smtp.qq.com", 587, timeout=5)
yield smtp
print("拆卸smtp")
smtp.close()
scope="module"
代表在模块的最后一次测试完成后执行smtp.close()
scope
还可以等于session, class, function
进阶写法,用到关键字with
import smtplib
import pytest
@pytest.fixture(scope="module")
def smtp():
with smtplib.SMTP("smtp.qq.com", 587, timeout=5) as smtp:
yield smtp
说明:如果在yield之前发生了异常,smtp.close()
不会被执行,关键字addfinalizer
解决这一痛点
import smtplib
import pytest
@pytest.fixture(scope="module")
def smtp(request):
smtp = smtplib.SMTP("smtp.qq.com", 587, timeout=5)
def fin():
print("拆卸smtp")
smtp.close()
request.addfinalizer(fin)
return smtp
网友评论