首页 > 其他分享 >conftest.py是什么?该怎么用?

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

时间:2023-08-04 10:02:56浏览次数:26  
标签:怎么 文件 py Fixture conftest pytest 测试

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

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,将使测试代码更加模块化、清晰和易于维护,从而提高整个测试项目的质量和效率。

标签:怎么,文件,py,Fixture,conftest,pytest,测试
From: https://blog.51cto.com/u_15640304/6957289

相关文章

  • 配置文件pytest.ini的详细使用
    使用pytest.ini定制化和管理pytest测试框架的配置前言在使用pytest进行测试时,我们经常需要根据项目的需求进行定制化配置。pytest提供了丰富的配置选项,使我们可以灵活地调整测试框架的行为。其中,pytest.ini文件是一种方便的方式来定义和管理pytest的配置。本文将详细介绍......
  • 100道Python练习题
    100道Python练习题,希望对你的学习有所帮助!编写一个程序,输入两个数并计算它们的和。编写一个程序,输入一个字符串,并倒序输出该字符串。编写一个程序,判断一个数是否为质数。编写一个程序,计算并输出斐波那契数列的前n项(n由用户输入)。编写一个程序,判断一个字符串是否为回文串。编写一个......
  • python实现单例的几种方式
    单例模式单例模式(SingletonPattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个AppConfig的类来读取配置文......
  • ubuntu 默认python版本切换
    Ubuntu下完美切换Python版,即设置系统默认的python版本(亲测有效)_ubuntu切换python版本_关彼得的博客-CSDN博客 sudosuupdate-alternatives--listpythonupdate-alternatives:error:noalternativesforpythonupdate-alternatives--install/usr/bin/pythonpytho......
  • 盘点一个初学者Python库安装的问题(Mac系统)(下篇
    大家好,我是皮皮。一、前言前几天在Python私教群【Emma】问了一个Python库安装的基础问题,一起来看看吧。上一篇文章讲到【Emma】的远程环境不给力,需要继续本地指导。二、实现过程针对导包失败的问题,这里【狂吃山楂片】给了一个解决方法,如下图所示:右下角可以设置环境,你点一下,......
  • Java面试题 P58:微服务篇:你们项目中有没有做过限流?怎么做的?
    单体项目,Tomcat中设置方式见上面:    ......
  • python + mysql
    1.连接mysql数据库,基本数据查询流程#1.连接conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',password='',db='db8',charset='utf8')#2.创建游标cursor=conn.cursor()#注意%s需要加引号sql="select*fromu......
  • pytest-xdist分布式测试原理浅析
    pytest-xdist执行流程:解析命令行参数:pytest-xdist会解析命令行参数,获取用户指定的分发模式、进程数、主机列表等信息。加载测试用例:pytest-xdist会加载所有的pytest测试用例,包括在当前目录和子目录下的所有测试文件和测试函数。分发测试用例:根据用户指定的分发模式,py......
  • Java面试题 P57:微服务篇:你们的微服务是怎么监控的?
        ......
  • pyspark 环境搭建和相关操作redis ,es
    一.环境搭建1.创建虚拟环境,指定python包2.切换到虚拟环境,安装你所需要的python相关模块包3.把整个虚拟环境打成.zip4.将zip上传的hadfs5.spark-submit指定python包的路径可以参考 https://dandelioncloud.cn/article/details/1589470996832964609二.pyspark数据r......