Pytest框架 conftest.py文件的使用详解

 更新时间:2022年06月02日 09:15:00   作者:测试-八戒  
conftest.py是pytest特有的本地测试配置文件,既可以用来设置项目级别的fixture,也可以用来导入外部插件,本文给大家介绍Pytest框架 conftest.py文件的使用,感兴趣的朋友一起看看吧

conftest.py文件特点

  • 所有同目录测试文件运行前都会执行conftest.py文件 不需要import导入
  • conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用了,如果放到某个package下,那就在该package内有效,可有多个conftest.py
  • conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
  • 可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用了一次fixture,或调用多次fixture

1、conftest.py文件介绍

conftest.py文件是Pytest框架里面一个很重要的东西,它可以在这个文件里面编写Fixture函数,这个Fixture函数的作用,就相当于Unittest框架里面的setup()前置函数和teardown()后置函数,虽然Pytest框架也有setup()前置函数和teardown()后置函数,但是在实际工作中没必要写在测试用例文件中,直接写在conftests.py里面就好了,Pytest框架会自动去找conftest.py文件里面的东西,这样更灵活。
总结:在实际工作中,通常conftest.py@pytest.fixture()结合使用,实现全局的前后置应用。

2、conftest.py的注意事项

  1. conftest.py文件是单独存放的一个夹具(Fixture)配置文件,名称是不能更改。
  2. 可以在不同的.py文件中使用同一个Fixture函数。
  3. 原则上conftest.py需要和运行的用例放到同一目录中,并且有__init__.py文件,那么conftest.py作用于整个目录。
  4. 如果希望Fixture(夹具)共享给所有测试,则可以把conftest.py文件放在测试框架的根目录下。
  5. conftest.py文件中的内容,不需要做任何的imprt导入的操作就能够读取到,因为Pytest用例会自动查找。
  6. 建议把测试项目的所有Fixture都存放在conftest.py文件中,把conftest.py当作Pytest的Fixture仓库。

3、conftest.py的使用

(1)测试框架的根目录或者包中创建conftest.py文件

"""
1.学习目标
    掌握conftest.py文件编写格式
2.操作步骤
    2.1 conftest.py文件名不能修改
        conftest.py文件中存放项目所有的fixture
        方便对fixture管理和维护
    2.2 在conftest.py定义函数
        在函数前添加@pytest.fixture()装饰器
        在测试用例的函数中传入fixture标识的函数名。
提示:conftest.py文件放在项目的根目录,作用域是全局的。
    conftest.py文件放在某一个包下,作用域只在该包内。
"""
import pytest
from selenium import webdriver
@pytest.fixture()
def login():
    print("打开APP")
    print("登录成功")
    yield  # 当用例执行完成后,执行yield后的代码
    print("关闭APP")
@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

(2)测试用例文件如下

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_01.py::test_add_cart 打开APP
登录成功
添加购物车--需要登录
PASSED关闭APP
test_01.py::test_add_address 打开APP
登录成功
添加收货地址--需要登录
PASSED关闭APP
"""

4、不同位置conftest.py文件的优先级

其作用范围是当前目录包括子目录里的测试模块。

  • 比如在测试框架的根目录创建conftest.py文件,文件中的Fixture的作用范围是所有测试模块。
  • 比如在某个单独的测试文件夹里创建conftest.py文件,文件中Fixture的作用范围,就仅局限于该测试文件夹里的测试模块。
  • 该测试文件夹外的测试模块,或者该测试文件夹外的测试文件夹,是无法调用到这个conftest.py文件中的Fixture。
  • 如果测试框架的根目录和子包中都有conftest.py文件,并且这两个conftest.py文件中都有一个同名的Fixture,实际生效的是测试框架中子包目录下的conftest.py文件中配置的Fixture。
  • 提示:一个用例可以添加多个conftest.py文件中定义的Fixture夹具,如下:
# 注意:要把conftest.py文件中定义的fixture方法添加到用例中
def test_add_cart(login, driver):
    print("添加购物车--需要登录")

5、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。

6、总结:

  • Pytest框架中的setup()/teardown()函数,setup_class()/teardown_class()函数。他们是作用于所有用例或者所有类的。
  • @pytest.fixtrue()的作用域是既可以部分用例,也可以全部用例的前后置。
  • conftest.py文件和@pytest.fxtrue()装饰器结合使用,作用于全局用例的前后置。

到此这篇关于Pytest框架 conftest.py文件的使用详解的文章就介绍到这了,更多相关Pytest conftest.py文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python OpenCV Canny边缘检测算法的原理实现详解

    Python OpenCV Canny边缘检测算法的原理实现详解

    这篇文章主要介绍了Python OpenCV Canny边缘检测算法的原理实现详解,由于边缘检测对噪声敏感,因此对图像应用高斯平滑以帮助减少噪声,具体详情需要的小伙伴可以参考一下
    2022-07-07
  • Python 12306抢火车票脚本

    Python 12306抢火车票脚本

    这篇文章主要为大家详细介绍了Python 12306抢火车票脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 详解requirements.txt的生成和安装

    详解requirements.txt的生成和安装

    本文主要介绍了详解requirements.txt的生成和安装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python使用定时调度任务的方式

    Python使用定时调度任务的方式

    Python 有几种方法可以定时调度一个任务,这就是我们将在本文中学习的内容。接下俩下边将给大家介绍5种Python使用定时调度任务方式,需要的朋友可以参考下面文章内容吧
    2021-09-09
  • selenium自动化测试入门实战

    selenium自动化测试入门实战

    这篇文章主要介绍了selenium自动化测试入门实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python使用指定端口进行http请求的例子

    Python使用指定端口进行http请求的例子

    今天小编就为大家分享一篇Python使用指定端口进行http请求的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Django csrf 验证问题的实现

    Django csrf 验证问题的实现

    csrf是通过伪装来自受信任用户的请求来利用受信任的网站。这篇文章主要介绍了Django csrf 验证问题的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • python进程管理工具supervisor的安装与使用教程

    python进程管理工具supervisor的安装与使用教程

    supervisor是用python写的一个进程管理工具,用来启动,重启,关闭进程。下面这篇文章主要给大家介绍了关于python实现的进程管理工具supervisor的安装与使用的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • Python数据展示之生成表格图片

    Python数据展示之生成表格图片

    这篇文章主要介绍了Python数据展示之生成表格图片,文章基于Python库的相关资料展开对主题的详细介绍,具有一定的参考价值需要的小伙伴可以参考一下
    2022-04-04
  • Python设计模式编程中Adapter适配器模式的使用实例

    Python设计模式编程中Adapter适配器模式的使用实例

    这篇文章主要介绍了Python设计模式编程中Adapter适配器模式的使用实例,一般来说适配器模式可以细分为类适配器和对象适配器模式,需要的朋友可以参考下
    2016-03-03

最新评论