news 2026/6/13 6:47:08

第十八:Pytest中的yield操作退出清理数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第十八:Pytest中的yield操作退出清理数据

一.项目目录

二.yield关键字

1.它不是单独存在,要写在fixtrue标记的固件中。2.在声明的固件fixture中加入yield关键字,在它下面写测试用例,其他有关于固件的使用没有任何差别。3.fixture里面的teardown用yield来唤醒teardown的执行。4.如果测试用例中的代码出现异常或者断言失败,并不会影响它的固件中yield后的代码执行。但是如果固件中的yield之前的代码也就是相当于setup部分的带代码,出现错误或断言失败,那么yield后的代码将不会再执行,当然测试用例中的代码也不会执行。

三.fixture的作用域scope

1.scope=“function”

1.1.当pytest.fixture(scope="function")时,每个方法(函数)都会执行一次

test_yield_function.py

# 当pytest.fixture(scope="function") 时,每个方法(函数)都会执行一次。importpytest@pytest.fixture(scope="function")deflogin():print(u"登录成功")yieldprint(u"用例执行完成,收尾")deftest_one(login):print(u'操作1')deftest_two(login):print(u'操作2')deftest_three(login):print(u'操作3')if__name__=="__main__":pytest.main(["-s","test_yield_function.py"])#此时test1,test2,test3三个地方都调用了login函数,并且它会在每一个用例前执行一次。

1.2.如果test1不调用,test2调用login,test3不调用,运行顺序会是怎样的?

test_yield_function.py

importpytest@pytest.fixture(scope="function")deflogin():print(u"登录成功")yieldprint(u"用例执行完成,收尾")deftest_one():print(u'操作1')deftest_two(login):print(u'操作2')deftest_three():print(u'操作3')if__name__=="__main__":pytest.main(["-s","test_yield_function.py"])#function级别的fixture在用例test2调用前执行一次。

2.scope=“module”

2.1.fixture参数scope=”module”,module作用是整个.py文件都会生效( 整个文件只会执行一次),用例调用时,参数写上函数名称就行。

test_yield_module.py

# 当fixture参数scope=”module”,module作用是整个.py文件都会生效( 整个文件只会执行一次),用例调用时,参数写上函数名称就行。importpytest@pytest.fixture(scope="module")deflogin():print(u"登录成功")yieldprint(u"用例执行完成,收尾")deftest_one(login):print(u'操作1')deftest_two(login):print(u'操作2')deftest_three(login):print(u'操作3')if__name__=="__main__":pytest.main(["-s","test_yield_module.py"])

2.2.如果test1不调用,test2调用login,test3不调用,运行顺序会是怎样的?

test_yield_module.py

importpytest@pytest.fixture(scope="module")deflogin():print(u"登录成功")yieldprint(u"用例执行完成,收尾")deftest_one():print(u'操作1')deftest_two(login):print(u'操作2')deftest_three():print(u'操作3')if__name__=="__main__":pytest.main(["-s","test_yield_module.py"]#module级别的fixture只会在用例test2调用前执行一次。

三.yield执行teardown

1.fixture里面的teardown用yield来唤醒teardown的执行

test_yield_module_one.py

importpytest@pytest.fixture(scope="module")deflogin():print(u"登录成功")yieldprint(u"执行teardown!")print(u"用例执行完成,收尾")deftest_one(login):print(u'操作1')deftest_two(login):print(u'操作2')deftest_three(login):print(u'操作3')if__name__=="__main__":pytest.main(["-s","test_yield_module_one.py"])

四.yield遇到异常

1.如果其中一个用例出现异常,不影响yield后面的teardown执行,运行结果互不影响,并且在用例全部执行完之后,会呼唤teardown的内容。

test_yield_module_two.py

importpytest@pytest.fixture(scope="module")deflogin():print(u"登录成功")yieldprint(u"执行teardown!")print(u"用例执行完成,收尾")deftest_one(login):print(u'操作1')# 如果第一个用例异常了,不影响其他的用例执行raiseNameError# 模拟异常deftest_two(login):print(u'操作2')deftest_three(login):print(u'操作3')if__name__=="__main__":pytest.main(["-s","test_yield_module_two.py"])

2.如果在setup就异常,那么是不会去执行yield后面的teardown内容。

test_yield_module_three.py

importpytest@pytest.fixture(scope="module")deflogin():# 如果在setup就异常了,那么是不会去执行yield后面的teardown内容了assert1==2print(u"登录成功")yieldprint(u"执行teardown!")print(u"用例执行完成,收尾")deftest_one(login):print(u'操作1')# 如果第一个用例异常了,不影响其他的用例执行#raise NameError # 模拟异常deftest_two(login):print(u'操作2')deftest_three(login):print(u'操作3')if__name__=="__main__":pytest.main(["-s","test_yield_module_three.py"])


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 6:37:47

Python量化分析的终极武器:MOOTDX通达信数据接口完全指南

Python量化分析的终极武器:MOOTDX通达信数据接口完全指南 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化投资领域,数据获取往往是开发者面临的第一道难关。MOOTDX作…

作者头像 李华
网站建设 2026/6/13 6:34:50

Uboot机制详细理解分析(5):Uboot重定位相关内容

Uboot机制详细理解分析(5):Uboot重定位相关内容 一、为什么要重定位? 1.1 重定义的位置 1.2 编译支持 二、重定位的意义 三、介绍一些重定位相关的表项结构(节): 四、uboot的重定位过程: U-BOOT的初始化阶段即将自身复制到另一个地址的操作,这个操作被称为重定位, r…

作者头像 李华
网站建设 2026/6/13 6:33:49

LM3S102芯片上uCOS-II在IAR环境下的完整移植工程包

本文还有配套的精品资源,点击获取 简介:面向Cortex-M3内核的LM3S系列微控制器(特别是LM3S102型号),提供一套开箱即用的uCOS-II实时操作系统移植方案。资料包含两份技术文档:一份详解LM3S102平台上的启动…

作者头像 李华
网站建设 2026/6/13 6:31:54

ColabFold:如何在10分钟内免费预测蛋白质三维结构?

ColabFold:如何在10分钟内免费预测蛋白质三维结构? 【免费下载链接】ColabFold Making Protein folding accessible to all! 项目地址: https://gitcode.com/gh_mirrors/co/ColabFold 你知道吗?曾经需要数万美元设备和数月时间的蛋白质…

作者头像 李华
网站建设 2026/6/13 6:30:51

eli5排列重要性:模型无关的特征敏感性分析实战

1. 项目概述:用 eli5 看清模型到底在“看”什么你训练了一个随机森林或 XGBoost 模型,准确率 92%,特征重要性图显示“收入”排第一、“年龄”排第二——但你心里总有点打鼓:这真的是模型做决策时真正依赖的依据吗?还是…

作者头像 李华