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区别】的更多相关文章

  1. Pytest权威教程16-经典xUnit风格的setup/teardown

    目录 经典xUnit风格的setup/teardown 模块级别setup/teardown 类级别setup/teardown 方法和函数级别setup/teardown 返回: Pytest权威教 ...

  2. pytest进阶之xunit fixture

    前言 今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearD ...

  3. pytest进阶之fixture

    前言 学pytest就不得不说fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一样,如果不学fixture那么使用pytest和使用unit ...

  4. Pytest - 进阶功能fixture

    1. 概述 Pytest的fixture功能灵活好用,支持参数设置,便于进行多用例测试,简单便捷,颇有pythonic.如果要深入学习pytest,必学fixture. fixture函数的作用: 完 ...

  5. pytest进阶之fixture函数

    fixture函数存在意义 与python自带的unitest测试框架中的setup.teardown类似,pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作.但是相 ...

  6. Pytest系列(4) - fixture的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 前面一篇讲了setup.te ...

  7. pytest文档51-内置fixture之cache使用

    前言 pytest 运行完用例之后会生成一个 .pytest_cache 的缓存文件夹,用于记录用例的ids和上一次失败的用例. 方便我们在运行用例的时候加上--lf 和 --ff 参数,快速运行上一 ...

  8. pytest文档23-使用多个fixture和fixture直接互相调用

    使用多个fixture 如果用例需要用到多个fixture的返回数据,fixture也可以return一个元组.list或字典,然后从里面取出对应数据. # test_fixture4.py impo ...

  9. python selenium unittest Fixture(setUp/tearDown)笔记

    Fixture用途: 1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现 2.测试用例的前置条件可以使用fixture实现 Fixture使用: ...

随机推荐

  1. [NOIP2013 普及组] 表达式求值

    [NOIP2013 普及组] 表达式求值 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. Input 一行,为需要你计算的表达式,表达式中只包含数字.加法运算符"+" ...

  2. python单ip端口扫描器

    from socket import * import threading #导入线程相关模块 # qianxiao996精心制作 #博客地址:https://blog.csdn.net/qq_363 ...

  3. redis的事件处理机制

    redis的事件处理机制 redis是单进程,单线程模型,与nginx的多进程不同,与golang的多协程也不同,"工作的工人"那么少,可那么为什么redis能这么快呢? epol ...

  4. SINAMICS S120的核心控制单元CU320使用教程,电机模块接线

    SINAMICS是西门子公司新一代的驱动产品,它正在逐步取代现有的MASTERDRIVES及SIMODRIVE系列的驱动系统.SINAMICS S120是集V/f控制.矢量控制和伺服控制于一体的多轴驱 ...

  5. JNDI With RMI

    JNDI With RMI JNDI with RMI JNDI即Java Naming and Directory Interface(JAVA命名和目录接口),jndi类似于一个索引中心,允许客户 ...

  6. 一个关于wait/notify与锁关系的探究

    wait/notify 机制是解决生产者消费者问题的良药.它的核心逻辑是基于条件变量的锁机制处理.所以,它们到底是什么关系?wait()时是否需要持有锁? notify()是否需要持有锁?先说答案:都 ...

  7. 深度学习训练过程中的学习率衰减策略及pytorch实现

    学习率是深度学习中的一个重要超参数,选择合适的学习率能够帮助模型更好地收敛. 本文主要介绍深度学习训练过程中的6种学习率衰减策略以及相应的Pytorch实现. 1. StepLR 按固定的训练epoc ...

  8. espnet中的transformer和LSTM语言模型对比实验

    摘要:本文以aishell为例,通过对比实验为大家介绍transformer和LSTM语言模型. 本文分享自华为云社区<espnet中的transformer和LSTM语言模型对比---以ais ...

  9. 解决Idea.exe无法启动问题(idea2017.3版本)

    问题: 最近在用idea时,突然弹出了以下消息框(图片不是我的): 将Xmx的值调大以后,idea还是闪退了.并且再点击idea.exe时,idea已经木有反映了,无法启动. 解决方案: 方案一(失败 ...

  10. 使用过 Redis 分布式锁么,它是什么回事?

    先拿 setnx 来争抢锁,抢到之后,再用 expire 给锁加一个过期时间防止锁忘记了 释放. 这时候对方会告诉你说你回答得不错,然后接着问如果在 setnx 之后执行 expire 之前进程意外  ...