Python测试中不存在“第510讲”官方体系;conftest.py是按目录向上查找的fixture注册中心;mock.patch需注意路径和参数顺序;doctest需显式启用并规范格式。
Python 测试系统没有“第510讲”这种官方分级体系,所谓“第510讲”是营销包装用语,实际并不存在对应权威课程编号或知识图谱节点。
conftest.py 作用和生效范围它不是全局配置文件,而是 pytest 按目录层级向上查找的本地 fixture 注册中心。pytest 会从每个测试文件所在目录开始,逐级向上找最近的 conftest.py,直到项目根目录(但不会跨 pytest.ini 或 pyproject.toml 中指定的 testpaths 边界)。
conftest.py 会被忽略(只认一个)conftest.py 可以覆盖父目录同名 @pytest.fixture,但不能覆盖 autouse=True 的 fixture 调用顺序conftest.py 中误写 import pytest 后又定义了 pytest_runtest_makereport 钩子,但没加 @pytest.hookimpl 装饰器,会导致 TypeError: object of type 'function' has no len()
最易出错的是装饰器写法中参数顺序:被 patch 的对象路径必须写全(如 "requests.get"),且位置参数传入顺序严格对应 patch 声明顺序,和函数定义参数名无关。
@patch("module.Class.method") → 测试方法多一个参数,是 mock 实例with patch("module.func") as mock_func: → 作用域内生效,退出 with 即还原patcher = patch("module.obj"); mock_obj = patcher.start(); patcher.stop() → 手动控制生命周期,常用于 setUp/tearDown
@patch("json.loads") 写成 @patch("loads"),会 patch 当前模块里的 loads,而非标准库
默认不执行 doctest,需显式启用。关键不是加 --doctest-modules 就完事,还要注意模块导入路径和文档字符串格式。
PYTHONPATH 或当前工作目录下)>>> 后必须紧跟代码,结果行顶格对齐
了 print(),而输出含换行或对象内存地址(如 <__main__.x object at>),需加 # doctest: +ELLIPSIS 或 +NORMALIZE_WHITESPACE
pyproject.toml 中固定配置:[tool.pytest.ini_options] addopts = [ "--doctest-modules", "--doctest-ignore-import-errors", "--doctest-report=udiff", ] python_files = ["test_*.py", "*_test.py", "*.py"]
真实项目里,测试失败往往卡在路径没设对、fixture 作用域理解偏差、或 mock 补丁打到了错误的命名空间——这些点比“学完多少讲”重要得多。