pytest进阶使用【fixture(一)fixture与setup/teardown区别】
fixture翻译为装置。
我觉得名字是很贴合功能的,可以自由给函数装置上自己想要的功能。
当在说pytest比unitest灵活时,fixture肯定是其中的一个理由。
测试数据的准备和执行以后的数据清理。
很多人可能会第一时间想到的是setup/teardown,但是fixture也能实现同样的效果,并且在某些场景下能做到setup做不到的事情。
比如setup虽然说是支持函数级,但是你是没办法指定某个用例执行的时候才去执行setup或者teardown。
只能说,要么都要、要么都不要。
但是fixture可以。
比如有三个用例,但是我想在用例1执行后轮到用例2的时候再去获取测试数据,你会发现setup/teardown使用。
要么用函数级,每个用例执行前都获取一遍数据。
要么用类级,在用例1执行前就去获取数据。
fixture则是装饰到用例2上即可。
具体代码区别如下。
unitest 函数级
class TestApi(unittest.TestCase):
def setUp(self):
print("开始执行")
def test_01(self):
print(1)
def test_02(self):
print(2)
def test_03(self):
print(3)
执行结果
开始执行
1
结束执行
开始执行
2
结束执行
开始执行
3
结束执行
unitest 类级
class TestApi(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("开始执行")
@classmethod
def tearDownClass(cls):
print("结束执行")
def test_01(self):
print(1)
def test_02(self):
print(2)
def test_03(self):
print(3)
执行结果
开始执行
1
2
3
结束执行
pytest fixture
class TestApi():
@pytest.fixture(scope='function')
def setup_function(self):
print("开始执行")
yield
print("结束执行")
def test_01(self):
print(1)
def test_02(self,setup_function):
print(2)
def test_03(self):
print(3)
执行结果
1
.开始执行
2
.结束执行
3
可以看到,开始执行和结束执行,是只单独在用例2前后执行。
至于为什么一个函数能在分两次执行,原因就是yield了,如果是函数级的,那么在用例执行完成后,就会去执行yield后面的代码,这就完成了setup/teardown的作用。
那这样看,fixture确实要比setup来的好用多。
但是,fixture最终是要装饰到用例上才会生效,也就是说如果你十个用例都要执行一次,那每个用例都得装饰上。。。
又或者你并不是想给某个用例执行,而是全模块、整个类。
灵活是灵活了,但是也有自身的局限性。
所以pytest也并没有舍去setup/teardown,两者都能共用。
下篇文章谈谈fixture的函数级、类级、模块级又和setup/teardown有什么不一样。
pytest进阶使用【fixture(一)fixture与setup/teardown区别】的更多相关文章
- Pytest权威教程16-经典xUnit风格的setup/teardown
目录 经典xUnit风格的setup/teardown 模块级别setup/teardown 类级别setup/teardown 方法和函数级别setup/teardown 返回: Pytest权威教 ...
- pytest进阶之xunit fixture
前言 今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearD ...
- pytest进阶之fixture
前言 学pytest就不得不说fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一样,如果不学fixture那么使用pytest和使用unit ...
- Pytest - 进阶功能fixture
1. 概述 Pytest的fixture功能灵活好用,支持参数设置,便于进行多用例测试,简单便捷,颇有pythonic.如果要深入学习pytest,必学fixture. fixture函数的作用: 完 ...
- pytest进阶之fixture函数
fixture函数存在意义 与python自带的unitest测试框架中的setup.teardown类似,pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作.但是相 ...
- Pytest系列(4) - fixture的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 前面一篇讲了setup.te ...
- pytest文档51-内置fixture之cache使用
前言 pytest 运行完用例之后会生成一个 .pytest_cache 的缓存文件夹,用于记录用例的ids和上一次失败的用例. 方便我们在运行用例的时候加上--lf 和 --ff 参数,快速运行上一 ...
- pytest文档23-使用多个fixture和fixture直接互相调用
使用多个fixture 如果用例需要用到多个fixture的返回数据,fixture也可以return一个元组.list或字典,然后从里面取出对应数据. # test_fixture4.py impo ...
- python selenium unittest Fixture(setUp/tearDown)笔记
Fixture用途: 1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现 2.测试用例的前置条件可以使用fixture实现 Fixture使用: ...
随机推荐
- 在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理
在一些内部OA或者流转的文件,或者给一些客户的报价文件.合同,或者一些医院出示的给保险机构的病历资料等,有时候可能都希望快速的使用电子签章的处理方式来给文件盖上特定的印章,本篇随笔介绍基于Vue&am ...
- 嵌入式Linux应用开发完全手册之环境搭建
@ 目录 0.下载源配置 1.电脑BIOS启动虚拟化 2.linux网卡查看与IP设置 3.windows NAT虚拟网络配置 4.修改 Ubuntu 的 mountd 端口 5.vim设置 6.Mo ...
- path()的name属性,有什么用?
官网(参考:命名 URL 模式) 命名 URL 模式: 为了完成反向解析 URL ,你需要像上面那样使用 命名 URL 模式 .用于命名 URL 的字符串可以包含任意字符,并不仅限于 Python 里 ...
- spring-boot-learning-监控相关
springboot提供了对项目的监控功能,首先我们需要引入需要的jar包: <!--监控包--> <!-- https://mvnrepository.com/artifact/o ...
- 部署新项目自动对数据库进行migrate和让用户收到创建用户/超级用户信息
当项目中的models有数据表的时候,普通做法是用docke exec -it hello_web_1 bash,进入容器进行migrate,但是我们想要容器一启动就自动创建数据表,可以修改docke ...
- Idea中使用Lombok 编译报找不到符号
1.问题描述 项目中使用了lombok,但是在idea编译过程是出现找不到符号.报错如下图所示: file @Data @ApiModel(value = "HeadTeacherVO& ...
- java接口返回为空时候如何处理
java前后端分离以后,后端常常返回给前端以下的内容: 如果遇到某个字段的内容为空的时候会出现这样的情况: 图中红色箭头的情况是一个数组集合,但是该集合为空,所以就返回null,但是我们如果想对于这样 ...
- (stm32f103学习总结)—ADC模数转换实验
一.STM32F1 ADC介绍 TM32F103 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可 以使用双重(提高采样率).STM32F1 的 ADC 是 12 位逐次 逼近型的模拟数 ...
- Linux基础学习 | gcc、g++的安装和使用
安装gcc 1.apt-get命令是debain Linux发新版的APT软件包管理工具. dabian.ubuntu.deepin等Linux系统通过以下命令: 安装gcc:Shell输入sudo ...
- jupyter notebook使用技巧
shift + tab 键可以查看对应源代码(注意:需要先将代码运行才能查看) Jupyter Notebook 的快捷键 Jupyter Notebook 有两种键盘输入模式:1.命令模式,键盘输入 ...