You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决conftest.py导入外部函数/夹具的ModuleNotFoundError?

解决pytest导入时的ModuleNotFoundError问题

1. 规范测试目录结构

先确保你的测试目录符合Python模块规范,必须给tests目录添加空的__init__.py文件,让Python将其识别为可导入模块。示例结构:

项目根目录/
├── src/
│   └── ...(业务代码文件)
└── tests/
    ├── __init__.py
    ├── conftest.py
    └── test_function.py

2. 调整导入语法

使用相对导入

在conftest.py中用相对路径导入test_function.py的内容,注意开头的.表示当前目录:

from .test_function import test_username_db, 目标fixture名

绝对导入(需配置Python路径)

如果偏好绝对导入(比如from tests.test_function import ...),需要把项目根目录加入Python搜索路径:

  • 方法一:运行pytest时临时设置路径
    在终端执行:
    PYTHONPATH=/你的项目根目录绝对路径 pytest
    
  • 方法二:在conftest.py开头添加代码自动配置
    import sys
    from pathlib import Path
    # 将项目根目录加入Python路径
    sys.path.append(str(Path(__file__).parent.parent))
    

3. 排查循环导入问题

检查是否出现conftest.py导入test_function.py内容,同时test_function.py又导入conftest.py中fixture的情况。如果存在循环导入,把共享的工具代码或通用fixture移到单独文件(比如tests/utils.py),两边都从这个文件导入。

4. 确认pytest运行路径

必须在项目根目录下执行pytest命令,不要进入tests目录再运行:

# 正确操作
cd 项目根目录
pytest tests/

# 错误操作(会导致路径识别异常)
cd tests
pytest

5. 调试路径问题

如果以上方法无效,可在conftest.py开头添加调试代码,确认Python路径是否正确:

import sys
from pathlib import Path
print("当前Python搜索路径:", sys.path)
print("conftest.py所在目录:", Path(__file__).parent)

运行pytest后查看输出,确认项目根目录或tests目录是否在搜索路径中。


内容的提问来源于stack exchange,提问作者trewbth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:05:01