使用Pytest测试时遭遇ModuleNotFoundError问题求助
解决pytest模块导入失败与环境变量问题
一、解决ModuleNotFoundError问题
核心原因是Python解释器默认只会将当前运行脚本的目录和系统路径加入模块搜索范围,你的测试文件在test子目录下,无法直接访问同级的model目录。
方法1:运行pytest时指定PYTHONPATH
在包含model和test的项目根目录打开终端,执行命令:
PYTHONPATH=. pytest
该命令会将根目录加入Python模块搜索路径,测试文件中可使用绝对路径导入模块,比如在test_cal.py中写:
from model.one.cal import 你的函数或类
方法2:通过conftest.py自动添加路径
在test目录下创建conftest.py文件,写入以下代码:
import sys from pathlib import Path # 将项目根目录(test的父目录)加入Python搜索路径 sys.path.append(str(Path(__file__).parent.parent))
pytest会自动加载该文件,无需手动设置环境变量,测试文件的导入写法与方法1一致。
二、解决TEST_UUID和TEST_PORT环境变量问题
pytest提示这两个变量缺失,说明你的代码中依赖了这两个环境变量,可通过以下方式设置:
方式1:终端手动设置后运行pytest
- Linux/macOS终端:
TEST_UUID="你的UUID值" TEST_PORT="你的端口号" pytest
- Windows CMD:
set TEST_UUID=你的UUID值 && set TEST_PORT=你的端口号 && pytest
- Windows PowerShell:
$env:TEST_UUID="你的UUID值"; $env:TEST_PORT="你的端口号"; pytest
方式2:在VSCode中配置环境变量
打开VSCode的.vscode/launch.json文件(无则创建),添加pytest配置并指定环境变量:
{ "version": "0.2.0", "configurations": [ { "name": "Python: pytest", "type": "python", "request": "launch", "module": "pytest", "env": { "TEST_UUID": "你的UUID值", "TEST_PORT": "你的端口号" }, "args": ["test/"] // 可指定测试目录 } ] }
之后通过VSCode运行按钮启动pytest即可。
三、验证方法
执行pytest --collect-only命令,若能正常收集测试用例,说明模块导入问题已解决;若环境变量相关报错消失,说明变量设置生效。
内容的提问来源于stack exchange,提问作者starm1x
相关产品推荐
相关产品推荐

