pytest conftest.py 文件特性、使用场景与 Scope 详解
本文详细解析 pytest 中 conftest.py 文件的核心特性,包括其自动识别、固定命名及作用域限制。重点讲解其在共享 Token、测试数据及配置中的应用,并深入剖析 session、module、class 和 function 四种 scope 的执行时机与差异,帮助开发者优化测试架构。
一、conftest.py 的特点
1、支持跨 .py 文件调用,当多个 .py 文件调用时,可确保 conftest.py 中的 fixture 只被调用一次,或根据需要调用多次
2、conftest.py 必须与运行的用例位于同一个 package 下,且该 package 中需包含 __init__.py 文件
3、无需显式 import 导入 conftest.py,pytest 用例会自动识别该文件。将其置于项目根目录下可实现全局调用;若置于某个 package 下,则仅在该 package 内有效,且项目中可存在多个 conftest.py 文件
4、conftest.py 的配置脚本名称是固定的,不可更改名称
5、conftest.py 文件不能被其他文件直接导入
6、所有同目录下的测试文件在运行前,都会执行 conftest.py 文件
二、conftest.py 的使用场景
1、每个接口需共用到的 token
2、每个接口需共用到的测试用例数据
3、每个接口需共用到的配置信息
三、conftest.py 的生效范围
1、如下面示例所示,若 conftest 文件位于 pytest2 目录下,则 pytest2 目录下的所有测试用例均可使用该 conftest 文件

2、如下面示例所示,若 conftest 文件位于 test_suit_01 目录下,则 test_suit_01 目录下的所有测试用例均可使用该 conftest 文件

四、conftest.py 的 scope 字段
1、如果生效范围设置为 scope="session"
# -*- coding:utf-8 -*-
import pytest
from lib import basefunc
@pytest.fixture(scope="session",autouse=True)
def setup_function():
print("执行conftest文件")
basefunc.delfile()
yield
print("执行conftest文件")
basefunc.delfile()
那么,在该目录下的所有测试用例只会执行一次
在所有的用例开始前会执行 yield 前面的代码
在所有的用例结束后会执行 yield 后面的代码
2、如果生效范围设置为 scope="module"
# -*- coding:utf-8 -*-
import pytest
from lib import basefunc
@pytest.fixture(scope="module",autouse=True)
def setup_function():
print("执行conftest文件")
basefunc.delfile()
yield
print("执行conftest文件")
basefunc.delfile()
那么,在该目录下的每个 .py 文件会执行一次
在每个 .py 文件中的用例开始前会执行 yield 前面的代码
在每个 .py 文件中的用例结束后会执行 yield 后面的代码
3、如果生效范围设置为 scope="class"
# 生效的范围,类级别,每个类才会执行一次
@pytest.fixture(scope="class",autouse=True)
def setUp():
print("在每个方法前执行")
yield
print("在每个方法后执行")
那么,在该目录下的每个类会执行一次
在每个类的用例开始前会执行 yield 前面的代码
在每个类的用例结束后会执行 yield 后面的代码
4、如果生效范围设置为 scope="function"
@pytest.fixture(scope="function",autouse=True)
def setUp():
print("在每个方法前执行")
yield
print("在每个方法后执行")
那么,在该目录下的每个测试函数会执行一次
在每个测试用例开始前会执行 yield 前面的代码
在每个测试用例结束后会执行 yield 后面的代码
以上就是 pytest 的 conftest.py 文件的使用讲解的详细内容,更多关于 pytest conftest.py 文件的使用的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









