pytest零基础入门到精通(04)conftest文件详解

本文详细解读conftest.py的作用,介绍了如何利用yield实现teardown功能,以及yield配合with语句的使用,同时展示了addfinalizer方法在终结函数中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

conftest的作用

首先, conftest.py 的文件名称是固定的, pytest 会自动识别该文件,我们可以理解成一个专门存放 fixture 的配置文件。

一个工程下可以建多个 conftest.py 文件,一般我们都是在工程根目录下设置的 conftest 文件,这样会起到一个全局的作用。 我们也可以在不同的子目录下放 conftest.py ,这样作用范围只能在该层级的子目录下生效。

conftest.py 配置 fixture 注意事项:

  • pytest 会默认读取 conftest.py 里面的所有 fixture。
  • conftest.py 文件名称是固定的,不能改动。
  • conftest.py 只对同一个 package 下的所有测试用例生效。
  • 不同目录可以有自己的 conftest.py,一个项目中可以有多个 conftest.py。
  • 测试用例文件中不需要手动 import conftest.py,pytest 会自动查找。

  • 下面我们来创建一个 conftest.py 的文件
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time   : 2021/11/22 13:23
# @Author : 余少琪
import pytest


"""
scope:
    1、scope 默认是function,只要是函数都会运行
    2、class 类级别,每个函数都会运行一次
    3、session 整个作用域只运行一次
    4、module 整个py文件(模块)作用域只运行一次
    
autouse: 是否自动调用

"""


@pytest.fixture(scope='session', autouse=True)
def login_init():
    print("这里返回了一个token")
  • 然后在存放 conftest.py 文件的根目录下在创建一个 test_demo.py 文件
import pytest


def test_aaa():
    print("这里是aaa函数")


if __name__ == '__main__':
    pytest.main(['test_demo.py', '-s'])

我们来查看一下执行结果:
pytest在执行 test_demo.py 文件之前,会先执行 conftest.py 文件中的方法,然后在执行 test_demo.py 文件。

============================= test session starts =============================
platform win32 -- Python 3.8.8, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: C:\Users\hzxy\PycharmProjects\pytest_api_demo, configfile: pytest.ini
plugins: allure-pytest-2.9.45
collected 1 item

test_demo.py 这里返回了一个token
这里是aaa函数
.

============================== 1 passed in 0.02s ==============================

yield实现teardown

fixture 实现 teardown 并不是一个独立的函数,而是用 yield 关键字来开启 teardown 操作。

pytest.fixture(scope="session") 时,作用域是整个测试会话,即开始执行pytest 到结束测试只会执行一次。

pytest.fixt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七月的小尾巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值