pytest 写了用例却不跑、fixture 不生效、参数化全失效?9 个高频坑对照表

简介: pytest 里 90% 的用例不执行、fixture 报错、参数化失效,都不是框架 bug,而是命名约定和作用域没踩准。9 组「症状→原因→修法」对照表一次讲清。

pytest 写了用例却不跑、fixture 不生效、参数化全失效?9 个高频坑对照表

结论先行:pytest 里 90% 的「用例没执行 / fixture 报 not found / 参数化没效果」,都不是框架 bug,而是命名约定没踩准或作用域理解错了。本文用 9 组「症状 → 原因 → 修法」对照表,把最常见的坑一次讲清楚。

坑 1:文件名不规范,pytest 一个用例都收集不到

症状:明明写了 test_login(),运行 pytest 显示 collected 0 items。

原因:pytest 默认只收集匹配 test_*.py 或 *_test.py 的文件。

文件名 是否被收集
test_login.py ✅ 是
login_test.py ✅ 是
login.py ❌ 否
TestLogin.py ❌ 否(大小写敏感)

修法:改文件名;或在 pytest.ini 里改约定:

[pytest]
python_files = check_*.py

坑 2:类名写了 Test,用例还是不执行

症状:类里有测试方法,但报告里一条都没有。

原因:三条硬约定缺一不可——类名以 Test 开头、方法名以 test_ 开头、类不能定义 __init__。

class TestLogin:          # ✅ 类名必须以 Test 开头
    def __init__(self):   # ❌ 有 __init__ 会导致 pytest 跳过整个类
        ...

    def test_ok(self):    # ✅ 方法必须以 test_ 开头
        assert True

修法:删掉 __init__,初始化逻辑改用 fixture。

坑 3:fixture 'xxx' not found

症状:E fixture 'db' not found。

原因:fixture 必须定义在测试文件内或该目录及其父目录的 conftest.py 中。放到兄弟目录、或放到 utils.py 里都不会被自动发现。

定义位置 可见范围
测试文件内部 仅本文件
同级 conftest.py 本目录
父目录 conftest.py 所有子目录
兄弟目录的 conftest.py ❌ 不可见

修法:把 fixture 提到上层 conftest.py;跨目录复用就往上提一级。

坑 4:fixture 被同名覆盖,你调的不是你以为的那个

症状:fixture 逻辑改了但测试结果没变。

原因:pytest 的覆盖优先级是 测试文件内的定义 > 同目录 conftest > 父目录 conftest。同名时,近的赢,远的被静默覆盖。

修法:改名区分,或用 pytest --fixtures 看实际生效的是哪个。

坑 5:@pytest.mark.parametrize 参数名写错

症状:TypeError: test_xxx() got an unexpected keyword argument。

原因:装饰器第一个字符串里的名字,必须与函数形参逐一对应。

# ❌ 声明了 a,b,形参是 x,y
@pytest.mark.parametrize("a,b", [(1, 2)])
def test_add(x, y):
    ...

# ✅ 对应
@pytest.mark.parametrize("a,b", [(1, 2)])
def test_add(a, b):
    assert a + b == 3

坑 6:mock.patch 路径打错,mock 根本没生效

症状:patch 了函数,但真实代码还是被调用了(跑真实网络请求/写库)。

原因:patch 的目标是使用处的名字,不是定义处的名字。

# mymod.py 里写的是:from utils import send
# ❌ patch 定义处
mock.patch("utils.send")
# ✅ patch 使用处(mymod 命名空间里的 send)
mock.patch("mymod.send")

小结:一句话记住——在哪用,就在哪打补丁。

坑 7:tmp_path 和 tmpdir 混用

症状:tmp_path.exists() 报错,或字符串拼接失败。

fixture 类型 用法
tmp_path pathlib.Path tmp_path / "a.txt"(推荐)
tmpdir py.path.local tmpdir.join("a.txt")(旧项目)

修法:新代码一律用 tmp_path,/ 运算符拼路径,别用 os.path.join。

坑 8:用例之间互相污染

症状:单独跑通过,一起跑就失败;换顺序跑结果还不一样。

原因:三类共享状态——环境变量、模块级单例/全局变量、未清理的临时数据库。

# ✅ 用 monkeypatch 改环境变量,用例结束自动还原
def test_env(monkeypatch):
    monkeypatch.setenv("MODE", "test")

修法:优先用 monkeypatch;单例类在 fixture 里重建;数据库用 fixture 建表 + teardown 删表。

坑 9:异常断言写错,断言被吞掉

症状:代码抛异常但测试仍通过,或反过来永远通过。

原因:把 pytest.raises 写成普通调用,或用了裸 except。

# ❌ 没当上下文管理器用,断言不生效
pytest.raises(ValueError, func())

# ✅ 正确写法
with pytest.raises(ValueError, match="invalid"):
    func()

速查小结

症状 第一怀疑对象
collected 0 items 文件名 / 类名 / 方法名约定
fixture not found conftest.py 位置
参数化报错 parametrize 名字与形参不匹配
mock 不生效 patch 路径打在了定义处
单跑过、一起跑挂 用例间状态污染

记住三句话:命名约定决定能不能被收集;conftest 位置决定 fixture 可见范围;patch 打在使用处。踩坑时按这三句倒查,基本都能在两分钟内定位。

相关文章
|
14天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
8073 15
|
13天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
2091 12
|
12天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1802 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
11天前
|
人工智能 编解码 并行计算
MiniMax-H3 一键整合包技术文档:8G 显存运行 AI 漫剧制作 —— 角色替换 / 动作迁移 / 文图生视频部署与调参指南
MiniMax H3 是 MiniMax 开源的全模态视频生成模型,支持文/图/音/视多条件输入,输出最高2K、15秒带双声道音频视频。本文档详述其Int8量化版在8GB显存下的本地一键部署、三段式工作流(EDIT/REPLACE/CONTINUE)、参数调优及常见问题排查。(239字)
|
7天前
|
人工智能 Linux 开发者
【2026国内使用】Codex安装过程一篇讲透(Win/Mac/Linux全支持)
Codex是OpenAI推出的AI编程智能体,可读取本地项目、理解需求并自动修改代码。支持桌面GUI、命令行(CLI)及VS Code/Cursor插件三种形态,覆盖可视化操作、终端高效开发与编辑器无缝集成场景,助开发者用自然语言驱动编码全流程。(239字)
【2026国内使用】Codex安装过程一篇讲透(Win/Mac/Linux全支持)
|
26天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
3845 10
|
21天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
2196 1

热门文章

最新文章