小牛丨软件测试学习小牛丨软件测试学习
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
  • Python 编程精华文章

    • Python 编程精华文章
    • 1. Python 基础语法面试怎么准备
    • 2. 列表元组字典集合怎么区分
    • 3. Python 字符串常用操作怎么用
    • 4. 函数参数和返回值怎么理解
    • 5. 异常处理在测试脚本中怎么用
    • 6. 文件读写和数据驱动测试
    • 7. Pytest 基础用法怎么讲
    • 8. Pytest fixture 怎么理解
    • 9. Python 接口测试脚本怎么写
    • 10. Python 自动化框架能力怎么提升
⌕
🛒项目实战📦资料包🛠测试神器AIAI路线CV简历测评🧭入行测评🧪测开测评🎯训练营🏆案例❤赞赏我

8. Pytest fixture 怎么理解

fixture 是 Pytest 中非常重要的机制,也是自动化测试面试中高频考点。很多测试同学知道 fixture 是前置和后置,但说不清楚它在项目里怎么用。实际上,fixture 不只是 setup 和 teardown 的替代品,它可以用于登录获取 Token、准备测试数据、创建数据库连接、初始化浏览器、清理环境、共享公共资源,是 Pytest 框架设计中的核心能力。

面试中问 fixture,重点要讲清楚:fixture 解决什么问题,怎么定义和使用,scope 有哪些级别,yield 如何实现后置,conftest.py 有什么作用,以及在接口自动化中如何用 fixture 管理登录态和测试数据。

一、fixture 解决什么问题

自动化测试中很多用例都有共同前置条件:

  • 登录获取 Token;
  • 准备用户数据;
  • 创建订单;
  • 连接数据库;
  • 初始化浏览器;
  • 清理测试数据;
  • 读取配置;
  • 初始化请求头。

如果每个用例都重复写这些代码,会非常冗余。fixture 可以把这些公共前置封装起来,用例需要时直接引用。

二、fixture 基本写法

import pytest

@pytest.fixture
def token():
    return "mock_token"

def test_order(token):
    assert token == "mock_token"

用例函数参数名和 fixture 名一致时,Pytest 会自动注入返回值。

三、fixture 用于登录 Token

接口自动化中最常见场景:

@pytest.fixture
def login_token():
    token = "mock_token"
    return token

def test_create_order(login_token):
    headers = {"Authorization": f"Bearer {login_token}"}
    assert "Authorization" in headers

真实项目中,fixture 会调用登录接口获取 Token,供后续接口使用。

四、fixture 的 yield 后置清理

如果 fixture 需要前置和后置,可以使用 yield。

@pytest.fixture
def test_data():
    order_id = "NO10001"
    yield order_id
    print("清理测试订单")

yield 前是前置,yield 后是后置。

测试场景:

  • 创建测试数据;
  • 用例执行;
  • 删除测试数据。

五、fixture scope 作用域

fixture 可以设置作用域:

  • function:每个用例执行一次,默认;
  • class:每个测试类执行一次;
  • module:每个模块执行一次;
  • session:整个测试会话执行一次。

例如:

@pytest.fixture(scope="session")
def base_url():
    return "https://test-api.example.com"

登录 Token 如果整个测试过程可复用,可以设置 session;如果每个用例需要独立登录,可以使用 function。

六、autouse 自动使用

@pytest.fixture(autouse=True)
def print_case_start():
    print("用例开始")

autouse=True 表示不需要显式传参,每个用例自动执行。

适合公共日志、环境检查等,但不要滥用,否则用例行为不透明。

七、conftest.py 的作用

conftest.py 是 Pytest 的配置文件,可以放公共 fixture。

例如项目结构:

testcases/
  test_order.py
conftest.py

conftest.py 中的 fixture 可以被同目录及子目录用例自动发现,不需要 import。

常放:

  • 登录 fixture;
  • base_url;
  • 数据库连接;
  • 浏览器驱动;
  • 全局配置;
  • 测试数据清理。

八、fixture 依赖 fixture

fixture 可以依赖另一个 fixture。

@pytest.fixture
def token():
    return "abc"

@pytest.fixture
def auth_headers(token):
    return {"Authorization": f"Bearer {token}"}

接口用例直接使用 auth_headers,更清晰。

九、接口自动化中的 fixture 设计

常见设计:

  • base_url:环境地址;
  • token:登录 Token;
  • auth_headers:鉴权头;
  • db:数据库连接;
  • create_order:创建订单并返回订单号;
  • clear_data:用例后清理数据。

fixture 的目标是让测试用例聚焦业务断言,而不是前置细节。

十、常见错误

1. scope 设置不合理

Token 如果容易过期,却设置 session,可能导致后续用例 401。

2. fixture 做太多事

一个 fixture 里登录、创建订单、支付、断言,职责过重。

3. 清理不完整

创建测试数据后不清理,导致环境污染。

4. autouse 滥用

所有用例自动执行隐藏逻辑,排查问题困难。

十一、面试回答模板

如果面试官问“Pytest fixture 怎么理解”,可以这样回答:

fixture 是 Pytest 用来管理前置、后置和公共资源的机制。接口自动化中,我常用 fixture 做登录获取 Token、生成鉴权 Header、准备测试数据、连接数据库和清理数据。fixture 可以通过 return 返回数据给用例,也可以用 yield 实现前置和后置清理。scope 可以控制执行频率,比如 function、module、session。公共 fixture 通常放在 conftest.py 中,让多个用例复用。设计 fixture 时要注意职责清晰、作用域合理,避免 Token 过期或测试数据污染。

十二、常见追问

追问:yield 有什么用?

yield 前是前置,yield 后是后置,适合创建数据后清理数据。

追问:conftest.py 为什么不用 import?

Pytest 会自动发现 conftest.py 中的 fixture,供同目录和子目录使用。

追问:fixture 和 setup/teardown 区别?

fixture 更灵活,可以按需使用、传递返回值、设置作用域、组合依赖。

追问:scope 怎么选?

看资源复用范围。每用例独立用 function,全局配置或稳定 Token 可用 session。

十三、练习清单

  1. 写一个 token fixture;
  2. 用 fixture 返回 headers;
  3. 用 yield 清理数据;
  4. 练习 function scope;
  5. 练习 session scope;
  6. 创建 conftest.py;
  7. 写 fixture 依赖 fixture;
  8. 避免 autouse 滥用;
  9. 用 fixture 准备订单数据;
  10. 准备 fixture 面试回答。

fixture 是 Pytest 框架化能力的核心。用得好,自动化用例会更清晰、更稳定、更容易维护。

配套刷题:

  • Python测试开发面试题
相关推荐

下一步可以看这些

面试通关软件测试面试通关系列精华文章

把面试题、项目、简历和训练营串成一套求职准备路径。

入行路线零基础入行软件测试专题路径

从测评、学习路线、项目、简历到面试,按顺序入行。

进阶路线初中级测试进阶高级专题路径

接口自动化、性能测试、CI/CD、复杂业务质量保障进阶路线。

AI 方向AI 测试学习路线专题页

大模型评测、RAG 测试、Agent 测试和 AI 自动化路线。

求职结果Offer 案例 / 学员案例展示

看看真实学员 Offer 案例,判断目标和学习投入是否匹配。

资料 / 交流群添加小牛微信

备注:资料、简历、AI 或找工作,领取对应资料或进交流群。

添加小牛微信
Prev
7. Pytest 基础用法怎么讲
Next
9. Python 接口测试脚本怎么写