当前位置: 代码迷 >> 综合 >> Pytest06:初识pytest fixture
  详细解决方案

Pytest06:初识pytest fixture

热度:120   发布时间:2023-10-24 21:32:41.0

1.初识fixture

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

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

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

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

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

import pytestdef 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 4def 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 itemtest_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  Taskdef 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 之后的代码

  相关解决方案