pytest-fixture

2020-04-13  本文已影响0人  huashen_9126

执行测试后自动执行某些操作,用到关键字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
上一篇 下一篇

猜你喜欢

热点阅读