Pytest Fixtures 详解:轻松掌握测试逻辑复用与资源管理
概述
在自动化测试中,重复代码 是一大痛点。比如:
- 每个测试都需要登录用户?
- 每次测试都要连接数据库或打开文件?
- 多个测试需要相同的初始化/清理步骤?
Pytest 提供了一个强大又灵活的机制 —— Fixture(夹具),它能帮助你将这些通用逻辑抽取出来,在多个测试中复用,并优雅地管理测试前后的准备和清理工作
什么是 Pytest Fixture
Fixture 是一个带有 @pytest.fixture 装饰器的函数,是一个用于为测试函数提供上下文支持的机制,它可以:
- 返回数据(如测试配置、模拟对象)
- 初始化环境(如启动浏览器、连接数据库)
- 清理资源(如关闭连接、删除临时文件)
Fixture 的特性如下:
1、可重用:多个测试可以共享同一个 fixture
2、自动注入:测试函数通过参数名自动使用 fixture
3、支持生命周期管理:可定义 setup 和 teardown 逻辑
4、支持作用域控制:如 function、class、module、session 等
基本使用方式
返回固定值(用于数据准备)
import pytest@pytest.fixture
def sample_data():return {"name": "Alice", "age": 30}def test_user_name(sample_data):assert sample_data["name"] == "Alice"def test_user_age(sample_data):assert sample_data["age"] == 30
在这个例子中,sample_data
是一个 fixture,被两个测试函数使用。
使用 yield 实现 setup + teardown
你可以使用 yield
来实现 setup 和 teardown 逻辑:
import pytest@pytest.fixture
def