pytest学习和使用8-fixture如何实现teardown功能?(yield的使用)
2023-03-07 09:16:13 时间
1引入
- 之前学习
fixture
的时候,其实这个功能就类似用例的前置,给用例执行前设置一些条件; - 那
fixture
也就相当于setup
的功能; - 那有没有
teardown
的功能呢? - 有,
fixture
里面的teardown
用yield
来唤醒teardown
的执行。
2 yield说明
yield
是一个关键字;yield
在fixture
中起到了唤起teardown
的作用,同时也可以和return
一样返回值;- 但
yield
和return
的区别是:return
执行完成,该函数终止;yield
在返回结束后,后续的代码仍可执行; - 如果
yield
前面的代码,即setup
部分已经抛出异常了,则不会执行yield
后面的teardown
内容; - 如果测试用例抛出异常,
yield
后面的teardown
内容还是会正常执行。
3 yield的使用
3.1 实现teardown
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17
# 文件名称:test_myiled.py
# 作用:yiled实现teardown功能
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
import pytest
@pytest.fixture(scope="module")
def start():
print("打开浏览器,输入账号和密码")
yield
print("关闭浏览器")
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%]执行用例11111
test_myiled.py::test_t PASSED [100%]执行用例22222
关闭浏览器
============================== 2 passed in 0.03s ==============================
3.2 yield返回值
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17
# 文件名称:test_yield_return.py
# 作用:yield返回值
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
import pytest
@pytest.fixture(scope="session")
def start():
print("打开浏览器")
num = "测试yield返回值"
yield num
print("关闭浏览器")
@pytest.fixture()
def login(start):
print("输入网址,用户名和密码")
name = "NoamaNelson"
password = "123456"
yield name, password
print("登陆成功")
def test_case(login):
print("开始执行用例")
name1, password1 = login
print(name1, password1)
assert "NoamaNelson" in name1
assert "123456" in password1
if __name__ == '__main__':
pytest.main(["-s", "test_yield_return.py"])
test_yield_return.py::test_case 打开浏览器
输入网址,用户名和密码
PASSED [100%]开始执行用例
NoamaNelson 123456
登陆成功
关闭浏览器
============================== 1 passed in 0.02s ==============================
4 yield+with
# 官网例子
@pytest.fixture(scope="module")
def smtp():
with smtplib.SMTP("smtp.gmail.com") as smtp:
yield smtp # provide the fixture value
- 当函数执行遇到
yield
的时候,函数会停止执行,并返回yield
后值。
5 addfinalizer 终结函数
- 在pytest中想要做
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/NoamaNelson
import pytest
@pytest.fixture(scope="module")
def test_addfinalizer(request):
# 前置操作setup
print("打开浏览器")
test = "test_addfinalizer"
def tear():
# 后置操作teardown
print("关闭浏览器")
request.addfinalizer(tear)
# 返回前置操作的变量
return test
def 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 ==============================
相关文章
- 终于大改版!Windows 11任务管理器新UI多图抢先看
- HarmonyOS实现音视频分离合成和截取
- OpenHarmony轻量系统开发【3】代码编译和烧录
- OpenHarmony轻量系统开发【2】源码下载和开发环境
- 两万字系统总结,带你实现 Linux 命令自由?
- Chrome 的画中画模式有望在 Windows 11 上获得重大更新
- 只需一条命令,快速找回Windows 10/11消失的“高级启动选项”菜单
- Linux下的TCP测试工具
- bpftrace:这个超好用的 Linux 性能工具,你还不知道?
- 一款比 htop 更强大的系统资源监控工具
- Linux 5.17引入“RTLA”:实时Linux性能分析与追踪工具
- 不再仅限 X11 和 Wayland,Firefox 获得更全面的 VA-API 支持
- Startpage 搜索引擎推出开源浏览器扩展,保护用户隐私数据
- Google Chrome新改进:使手动保存网站密码变得更加容易
- Linux驱动小技巧 | 利用DRIVER_ATTR实现调用内核函数
- 强大!微软发Windows 2022系统新版:镜像免费下载
- 为什么你应该安装使用 Arch Linux
- Windows 10 21H2版本完成大规模推送:将再也没有新功能
- 微软 Office 将默认禁用 Excel 4.0 的宏支持
- System76 的 COSMIC 桌面面板看起来很清爽!