conftest.py是什么?该怎么用?

简介: conftest.py是什么?该怎么用?

使用 pytest 的 conftest.py 提高测试代码的可重用性和可维护性

pytest 是一个功能强大的 Python 测试框架,它提供了许多灵活且易于扩展的功能。其中之一是使用 conftest.py文件来共享和管理测试代码的配置和工具函数。本文将介绍 conftest.py的作用,以及如何使用它来提高测试代码的可重用性和可维护性。

前言

在编写和组织测试代码时,复用性和维护性是两个关键考虑因素。pytest 是一个流行的 Python 测试框架,它提供了一种简洁而灵活的方式来组织和运行测试。其中一个强大的特性是 conftest.py 文件,它允许我们共享和管理测试代码的配置和工具函数。本文将详细介绍 conftest.py 的作用和使用方法,以帮助您提高测试代码的复用性和可维护性。

conftest.py文件

  1. conftest.py 文件的作用

conftest.py 文件在 pytest 中具有以下作用:

  • 共享配置:通过在 conftest.py中定义全局的配置参数,可以使多个测试模块共享相同的配置设置,避免重复代码。
  • 自定义 fixture:conftest.py 允许我们定义自定义的fixture,它是一种提供测试数据或测试环境的机制。这些 fixture 可以在测试模块中通过函数名直接使用,从而简化测试代码。
  • 导入外部插件:通过 conftest.py,可以导入和配置第三方插件,以增强 pytest 的功能。这样可以灵活地扩展测试框架,满足项目的需求。
  1. 创建和配置conftest.py文件

创建和组织 conftest.py 文件的步骤如下:

  • 创建 conftest.py 文件:在项目的根目录或测试目录下创建一个名为 conftest.py·的文件。
  • 定义共享 fixture:在 conftest.py中,使用@pytest.fixture 装饰器定义共享的fixture函数。这些 fixture 函数可以在测试模块中直接使用。
  • 配置全局参数:在 conftest.py中,可以定义全局的配置参数,例如日志级别、数据库连接等。这些参数可以在整个测试项目中共享和使用。
  • 导入和配置插件:如果需要使用第三方插件,可以在 conftest.py 中导入并进行相应的配置。这样,插件的功能就可以在整个测试项目中生效。

使用示例

我们在根目录或者在包中创建conftest.py文件,文件内容如下:

import pytest
from selenium import webdriver
@pytest.fixture()
def login():
    print("打开网页")
    print("登录成功")
    yield  # 当用例执行完成后,执行yield后的代码
    print("关闭网页")
@pytest.fixture()
def driver(request):  # request是Pytest中的一个关键字,固定写法。
    # 步骤1:创建浏览器驱动对象
    driver = webdriver.Chrome()
    # 步骤3:定义用例执行后要执行的代码,封装到一个函数中
    def end():  # 这个end函数命是自定义的
        driver.quit()
    # 步骤4:执行上面封装的代码。
    # 通过request关键字,结束上面的函数。
    request.addfinalizer(end)  # 终结函数
    # 步骤2:返回浏览器驱动对象,给测试用例
    return driver

测试用例文件如下:

import pytest
# 注意:要把conftest.py文件中定义的fixture方法添加到用例中
def test_add_cart(login): # 把conftest.py文件中的fixture函数传入用例
    print("添加购物车--需要登录")
def test_add_address(login):
    print("添加收货地址--需要登录")
if __name__ == '__main__':
    pytest.main()

运行测试用例文件,结果如下:

============================= test session starts =============================
collecting ... collected 2 items

test_demo1.py::test_add_cart 打开网页
登录成功
PASSED                                      [ 50%]添加购物车--需要登录
关闭网页

test_demo1.py::test_add_address 打开网页
登录成功
PASSED                                   [100%]添加收货地址--需要登录
关闭网页


============================== 2 passed in 0.02s ==============================

conftest.py文件的优先级

conftest.py的作用范围是当前目录包括子目录里的测试模块。如下:

  • 在测试框架的根目录创建conftest.py文件,文件中的Fixture的作用范围是所有测试模块。
  • 在某个单独的测试文件夹里创建conftest.py文件,文件中Fixture的作用范围,就仅局限于该测试文件夹里的测试模块。
  • 测试文件夹外的测试模块,或者该测试文件夹外的测试文件夹,是无法调用到这个conftest.py文件中的Fixture
  • 测试框架的根目录和子包中都有conftest.py文件,并且这两个conftest.py文件中都有一个同名的Fixture,实际生效的是测试框架中子包目录下的conftest.py文件中配置的Fixture

conftest.py中Fixture(夹具)的作用域

Fixture的scope参数也适用conftest.py文件中Fixture的特性:

  • conftest.py文件中Fixture的scope参数为session,那么所有的测试文件执行前(后)执行一次conftest.py文件中的Fixture。
  • conftest.py文件中Fixture的scope参数为module,那么每一个测试文件执行前(后)都会执行一次conftest.py文件中Fixture。
  • conftest.py文件中Fixture的scope参数为class,那么每一个测试文件中的测试类执行前(后)都会执行一次conftest.py文件中Fixture。
  • conftest.py文件中Fixture的scope参数为function,那么所有文件的测试用例执行前(后)都会执行一次conftest.py文件中Fixture。

总结

conftest.py 文件是 pytest 的一个强大功能,可以帮助我们提高测试代码的可重用性和可维护性。通过共享配置、定义 fixture 和配置全局参数,我们可以减少重复代码,提供统一的测试环境和数据,以及灵活扩展 pytest 的功能。合理使用 conftest.py,将使测试代码更加模块化、清晰和易于维护,从而提高整个测试项目的质量和效率。

相关文章
|
11月前
|
数据采集 监控 API
加密货币 Pump 监测刮刀工具开发原理及实现路径
开发Pump监测刮刀工具需综合运用高频数据采集、波动率建模、跨平台对冲三大核心技术,2025年的技术瓶颈已从基础数据获取转向超低延迟执行与合规适配。建议采用模块化开发策略,优先实现核心监控功能,再逐步接入AI决策与链上套利模块。代码示例需根据最新交易所API文档动态调整,并严格遵守所在地监管法规。
|
SQL 机器人 测试技术
pytest+yaml框架环境配置和使用教程
pytest+yaml框架环境配置和使用教程
|
机器人 测试技术
微信公众平台开发(84) 小i机器人
很多朋友询问如何开发小黄鸡之类的智能聊天机器人,但遗憾的是小黄鸡接口申请页面在最近几个月里都无法访问,且使用时限制太大,我们找了另一个接口:小i机器人。本文介绍如何在微信公众平台中使用小i接口开发智能聊天机器人。
1601 0
|
机器学习/深度学习 数据挖掘 开发者
|
机器学习/深度学习 算法 TensorFlow
TensorFlow 深度学习实战指南:1~5 全(1)
TensorFlow 深度学习实战指南:1~5 全(1)
354 0
|
开发工具 Python
【SLS开源兼容系列】使用ES SDK 访问SLS
本文介绍如何用es sdk访问sls
482 0
|
存储 对象存储
阿里云对象存储OSS存储包100G/500G/1T/10T/500T等收费价格说明
阿里云对象存储OSS存储费可以按量付费也可以购买存储包抵扣,存储包分为标准、低频及归档,存储包种类不同价格不同,对象存储OSS所属地域不同OSS存储包价格也不同。
lodash判断对象的属性是否存在
lodash判断对象的属性是否存在
783 0
|
应用服务中间件 Linux nginx
Docker镜像-手动制作yum版nginx镜像
这篇文章介绍了如何手动制作一个基于CentOS 7.6的Docker镜像,其中包括下载指定版本的CentOS镜像,创建容器,配置阿里云软件源,安装并配置nginx,自定义nginx日志格式和web页面,最后提交镜像并基于该镜像启动新容器的详细步骤。
484 21
Docker镜像-手动制作yum版nginx镜像
|
Linux 数据安全/隐私保护 Ubuntu
Linux - root初始密码设置
Ubuntu刚安装后,不能在terminal中运行su命令,因为root没有默认密码,需要手动设定. 以安装ubuntu时输入的用户名登陆,该用户在admin组中,有权限给root设定密码. 给root用户设置密码的具体步骤: 1.
2559 0