Pytest06:初识pytest fixture

1.初识fixture

fixture 的功能 主要包括以下三点:

  1. 传入测试中的数据集
  2. 配置测试前系统的初始状态,
  3. 为批量测试提供数据源

如何声明函数是一个fixture?
答: 用 @pytest.fixture() 装饰器

fixture 函数 在执行顺序上有什么不同?

答: pytest 首先会检测到 fixture 函数, 并在运行测试函数之前先执行fixture
,fixture既可以完成一些测试之前的工作(初始化数据),也可以返回数据
(测试数据集)给测试函数.
为了证明是否在测试函数之前执行,我们编写简单的代码看看

import pytest


def test_fixture(return_data):
    assert  return_data==2
#@pytest.fixture()
def return_data():
    return 2

报错如下;

test setup failed
file D:\tasks_proj\tests\func\test_add.py, line 4
  def test_fixture(return_data):
E       fixture 'return_data' not found

报 return _data not found , 我们 再 把fixture 装饰器注销删除掉,试试 结果

打印结果;

============================= test session starts =============================
platform win32 -- Python 3.6.6, pytest-4.0.0, py-1.7.0, pluggy-0.8.0
rootdir: D:\tasks_proj\tests, inifile: pytest.inicollected 1 item

test_add.py .                                                            [100%]

========================== 1 passed in 0.02 seconds ===========================

2.通过conftest.py 共享fixture

1.如果你的fixture 只是针对a.py 这个文件,你就需要把fixture 放在文件里
2.假如 A 文件夹 有 a.py,b.py,c.py 三个文件,如果三个文件共享fixture
就需要把 conftest.py (里面包含fixture)放在 A文件夹
原理是: confest.py 的作用域 是它同级的文件或者文件夹,以及同级文件夹里面的文件或者目录.

3.使用fixture 执行配置及销毁逻辑

我们下边利用fixture 进行 数据库的连接,并断开与数据库的连接.  

代码如下:

import  pytest,tasks
from tasks import Task

@pytest.fixture()      #fixture 装饰器
def tasks_db(tmpdir):  # 这里用到了tmpdir 装饰器
    tasks.start_tasks_db(str(tmpdir),"tiny")   #建立连接 
    yield                                      #运行测试代码
    tasks.stop_tasks_db()              #断开连接

测试代码如下:

import pytest,tasks
from tasks import  Task


def test_fixture(tasks_db):  
 #一定要把fixture 放在参数里面,这个是对fixture的调用 
    new_task=Task("")        #new 一个Task 对象
    task_id=tasks.add(new_task) #  获取对象的id 
    assert  isinstance(task_id,int)   

运行结果如下:

在这里插入图片描述

如果想看 fixture 的执行过程,可以用 --setup-show 选项 ,我们试试

在这里插入图片描述

可以看出分为三部分,
1.SETUP , yield 之前的代码
2.测试函数
3.TEARDOWN yield 之后的代码

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值