fixture的时候,其实这个功能就类似用例的前置,给用例执行前设置一些条件;fixture也就相当于setup的功能;teardown的功能呢?fixture里面的teardown用yield来唤醒teardown的执行。yield是一个关键字;yield在fixture中起到了唤起teardown的作用,同时也可以和return一样返回值;yield和return的区别是:return执行完成,该函数终止;yield在返回结束后,后续的代码仍可执行;yield前面的代码,即setup部分已经抛出异常了,则不会执行yield后面的teardown内容;yield后面的teardown内容还是会正常执行。# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17
# 文件名称:test_myiled.py
# 作用:yiled实现teardown功能
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelsonimport pytest@pytest.fixture(scope="module")
def start():print("打开浏览器,输入账号和密码")yieldprint("关闭浏览器")def test_o(start):print("执行用例11111")def test_t(start):print("执行用例22222")if __name__ == '__main__':pytest.main(["-s", "test_myiled.py"])
test_myiled.py::test_o 打开浏览器,输入账号和密码
PASSED [ 50%]执行用例11111test_myiled.py::test_t PASSED [100%]执行用例22222关闭浏览器============================== 2 passed in 0.03s ==============================
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17
# 文件名称:test_yield_return.py
# 作用:yield返回值
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelsonimport pytest@pytest.fixture(scope="session")
def start():print("打开浏览器")num = "测试yield返回值"yield numprint("关闭浏览器")@pytest.fixture()
def login(start):print("输入网址,用户名和密码")name = "NoamaNelson"password = "123456"yield name, passwordprint("登陆成功")def test_case(login):print("开始执行用例")name1, password1 = loginprint(name1, password1)assert "NoamaNelson" in name1assert "123456" in password1if __name__ == '__main__':pytest.main(["-s", "test_yield_return.py"])
test_yield_return.py::test_case 打开浏览器输入网址,用户名和密码
PASSED [100%]开始执行用例NoamaNelson 123456登陆成功关闭浏览器============================== 1 passed in 0.02s ==============================
# 官网例子
@pytest.fixture(scope="module")
def smtp():with smtplib.SMTP("smtp.gmail.com") as smtp:yield smtp # provide the fixture value
yield的时候,函数会停止执行,并返回yield 后值。teardown的处理,除了使用带有yield的fixture函数,还可以直接添加终结器;request.addfinalizer把函数变成终结器;request.addfinalizer() 前面的代码,即setup部分已经抛出异常了,则不会执行 request.addfinalizer() 的teardown内容;# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17
# 文件名称:test_addfinalizer.py
# 作用:request.addfinalize的使用
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelsonimport pytest@pytest.fixture(scope="module")
def test_addfinalizer(request):# 前置操作setupprint("打开浏览器")test = "test_addfinalizer"def tear():# 后置操作teardownprint("关闭浏览器")request.addfinalizer(tear)# 返回前置操作的变量return testdef test_case(test_addfinalizer):print("测试用例")if __name__ == "__main__":pytest.main(["-s", "test_addfinalizer.py"])
test_addfinalizer.py::test_anthor 打开浏览器
PASSED [100%]测试用例关闭浏览器============================== 1 passed in 0.02s ==============================
上一篇:中台和微服务有什么区别?
下一篇:数据库的基本操作(5)