Skip to content

Pytest 测试用例生命周期管理 - 自动注册


简介

在 pytest 中,conftest.py 是一个特殊的配置文件,通常用于定义共享的 fixture、hooks 或其他全局设置,供整个项目中的测试使用。

conftest.py 文件可以帮助你管理项目级别的配置、共享的测试功能、预处理和清理操作,使得多个测试文件能够共享同一组配置或资源,而不需要在每个测试文件中重复定义。

conftest.py ⽂件名是固定的,不可以变化。


运行机制

  • 自动加载:当运行 pytest 时,pytest 会自动搜索并加载当前目录及其上层目录中的 conftest.py 文件。不需要显式地导入 conftest.py 中定义的 fixtures,它们会自动成为测试文件的一部分。
  • 作用范围:conftest.py 中定义的内容具有全局作用。conftest.py 文件会应用于当前目录及其子目录下的所有测试文件。
  • 目录层级:pytest 会逐级向上查找 conftest.py 文件。如果某个测试文件位于子目录中,它会加载该子目录下的 conftest.py 文件,并且会继续加载父目录的 conftest.py 文件,直到找到项目根目录下的 conftest.py

使用场景

团队合作⼀起开发时,有一些公共的模块大家都需要使用。

解决方案:使⽤ conftest.py ⽂件进⾏数据共享,并且可以放在不同位置起着不同的范围共享作⽤。


使用步骤

  1. 创建 conftest.py 文件:通常放在项目的根目录或一个特定的测试子目录中。
  2. conftest.py 文件中定义 fixture 或者 hooks。
  3. 在测试用例中直接传入 fixture 名字,不需要在测试文件中导入。

实战案例

  • 在项⽬根目录下创建 conftest.py 文件。
  • conftest.py 文件中定义登录和连接数据库两个 fixture。
  • 在测试用例中直接传入以上两个 fixture 名称。
# conftest.py
import pytest


@pytest.fixture(scope="class")
def login():
     # setup 操作
     print("完成登录操作")
     token = "abcd"
     username = 'hogwarts'
     yield token,username # 相当于return
     # teardown 操作
     print("完成登出操作")

@pytest.fixture()
def connectDB():
     print("连接数据库")
     yield
     print("断开数据库")

# test_fixture_conftestdemo.py
def test_get_product(login, connectDB):
    print("验证获取单品信息")

运行结果:


总结

  • conftest.py 运行机制
  • conftest.py 使用场景
  • 实战案例