Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >conftest.py是什么?该怎么用?

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

原创
作者头像
霍格沃兹测试开发Muller老师
发布于 2023-09-07 03:13:57
发布于 2023-09-07 03:13:57
39301
代码可运行
举报
运行总次数:1
代码可运行

使用 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文件,文件内容如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
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

测试用例文件如下:

代码语言:python
代码运行次数:1
运行
AI代码解释
复制
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()

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

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
============================= 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,将使测试代码更加模块化、清晰和易于维护,从而提高整个测试项目的质量和效率。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Pytest全局用例共用之conftest.py详解
1、可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用了一次fixture,或调用多次fixture
王大力测试进阶之路
2019/11/10
5.5K0
Pytest fixture及conftest详解
最近一段时间准备写一篇《自动化测试框架一键动态切换测试环境》的实践总结,但由于要涉及到pytest fixture相关知识,遂决定先写一篇pytest fixture的基础介绍。
大刚测试开发实战
2022/11/14
1.8K0
Pytest fixture及conftest详解
pytest入门 -7 conftest.py的应用
3、conftest.py文件可以有多个,且多个conftest.py文件里的多个fixture可以被一个用例调用。(即在不同的用例package中也可以建conftest.py文件实现调用,而根目录下就是所有用例都可以调用的)
孟船长
2022/02/23
4160
pytest入门  -7 conftest.py的应用
Pytest测试实战|Conftest.py详解
The pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries. 这段话很好地阐述了Pytest的设计思想与强大的特性。之前详细地阐述了Pytest测试框架搜索规则、Pytest测试框架执行方式、Pytest测试框架参数化与Pytest测试框架Fixture详解,本文章主要详细地阐述下Pytest测试框架中Conftest.py特性。
无涯WuYa
2024/04/23
3160
Pytest测试实战|Conftest.py详解
Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据
setup、teardown 可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个脚本全局的。
wangmcn
2022/07/26
5180
Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据
解锁 Pytest 自动化测试框架 conftest 使用技巧:助力高质量测试!
在Python的测试框架pytest中,conftest.py是一个特殊的文件,它允许你定义一些在多个测试文件或测试类中共享的fixture,钩子函数和插件。它是pytest的核心组成部分,提供了极大的灵活性和便利性。本文将会带你深入了解conftest.py的精髓,包括其是什么、用途、使用方法和高级示例。
测试开发技术
2024/12/19
1560
解锁 Pytest 自动化测试框架 conftest 使用技巧:助力高质量测试!
pytest 自动化测试框架(二)
在上一篇文章中分享了 pytest 的基本用法,本文进一步介绍 pytest 的其他实用特性和进阶技巧。
霍格沃兹测试开发
2020/10/26
8680
聊一聊,Python自动化测试框架
在Python语言系中,有很多可用的自动化测试框架,比如早期大多数人会选用 unittest+HTMLTestRunner、Nose等,最近几年比较常用的有Robot Framework,Robot Framework它是Python下一款非常通用的测试框架,采用扩展插件的机制可以帮助我们实现几乎任何类型的自动化测试工作,如接口自动化测试、App自动化测试、Web UI自动化测试等,而针对Robot Framework框架系统性的使用和讲解,笔者年初出版上市过一本《自动化测试实战宝典》一书,感兴趣的,可参阅此书:重磅消息 |《自动化测试实战宝典:从小工到专家》隆重上市!。
测试开发技术
2021/01/22
4K0
Pytest全局用例共用之conftest.py详解
1、可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用了一次fixture,或调用多次fixture
Criss@陈磊
2019/12/04
4.1K0
pytest测试框架系列(4)-pytest.ini和conftest.py文件
pytest测试框架的比较重要的两个文件就不得不说下pytes.ini和conftest.py文件。
搁浅同学
2022/07/21
1K0
pytest测试框架系列(4)-pytest.ini和conftest.py文件
Pytest系列(6) - conftest.py的详细讲解
https://www.cnblogs.com/poloyy/category/1690628.html
小菠萝测试笔记
2020/06/09
9910
Pytest系列(6) - conftest.py的详细讲解
【python自动化】pytest系列(下)
执行顺序:module --> class --> function --> 用例
梦无矶小仔
2023/08/11
2940
【python自动化】pytest系列(下)
Python pytest框架之@pytest.fixture()和conftest详解
一、fixture简介 学pytest就不得不说fixture,fixture是pytest的精髓所在,类似unittest中setup/teardown这种前后置东西。但是比它们要强大、灵活很多,它的优势是可以跨文件共享 fixture的目的是提供一个固定基线,在该基线上测试可以可靠地和重复地执行。fixture提供了区别于传统单元测试(setup/teardown)有显著改进 1、有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。 2、按模块化的方式实现,每个fixture都可以互相调用。 3、fixture的范围从简单的单元扩展到复杂的功能测试,允许根据配置和组件选项对fixture和测试用例进行参数化,或者跨函数function、类class、模块module或整个测试会话sessio范围。
王大力测试进阶之路
2019/10/25
5.8K0
pytest文档5-fixture之conftest.py
前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录。很显然这就无法用setup和teardown来实现了。这就是本篇学习的目的,自定义测试用例的预置条件
上海-悠悠
2018/08/03
1.4K0
Python测试框架pytest(08)fixture - conftest.py、yield、addfinalizer
conftest.py 文件名称是固定的,pytest 会自动识别该文件,可以理解成一个专门存放 fixture 的配置文件。
wangmcn
2022/07/26
3900
Python测试框架pytest(08)fixture - conftest.py、yield、addfinalizer
pytest学习和使用9-fixture中conftest.py如何使用?
B、某个单独的测试文件夹里创建conftest.py文件,文件中Fixture的作用范围,就仅局限于该测试文件夹里的测试模块;该测试文件夹外的测试模块,或者该测试文件夹外的测试文件夹,是无法调用到这个conftest.py文件中的Fixture。
虫无涯
2023/02/16
4570
pytest fixtures_pytest命令
Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进:
全栈程序员站长
2022/09/16
6450
一文带你了解Pytest..
在之前的文章里我们已经学习了Python自带测试框架UnitTest,但是UnitTest具有一定的局限性
测试小兵
2023/12/15
2100
一文带你了解Pytest..
Pytest中conftest.py共享fixture(五)
有一点首先需要确认的的是,pytest中的fixture是pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制。但是我们更加希望的是在一个测试套件中,能够共享fixture的机制,这样所一个测试套件里面的所有测试点都能够共同使用,和我在早期介绍的分离测试固件的思想有点雷同。在pytest中通过conftest.py来共享fixture,如果希望多个测试文件共同使用一个fixture时候,可以在该目录下创建conftest.py文件,但是切记该文件绝对不能倒入使用,这点一定要注意,创建conftest.py文件后,把需要的fixture加入到里面,就可以使用了。先来一个简单的案例,在一个包中,有三个测试模块,每个测试点都显示开始前执行和结束后执行,也就是说,每个测试点执行的时候,先打印测试开始,然后执行测试点,然后最后打印测试结束,见案例代码:
无涯WuYa
2019/09/25
6140
Pytest中conftest.py共享fixture(五)
Pytest学习笔记2——前后置处理高级函数Fixture(完整篇)
  前面介绍了pytest传统的前后置处理方法,通过一些实例,知道了它对处理前后置的场景是有一定的局限性。所以才引入fixture装饰器函数,fixture是pytest的核心功能,也是亮点功能,它可以灵活的处理很多特殊的场景,利用pytest做接口测试,熟练掌握fixture的使用方法,pytest用起来才会得心应手!
全栈测试开发日记
2023/02/02
2.8K0
Pytest学习笔记2——前后置处理高级函数Fixture(完整篇)
相关推荐
Pytest全局用例共用之conftest.py详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验