VSCode 中 pytest 功能失效的根本原因是测试框架未被正确识别和配置:必须显式设置 python.testing.testFramework 为 "pytest"、禁用 unittestEnabled、启用 pytestEnabled,指定正确 Python 解释器,并配置 pytestArgs 和 cwd 以匹配项目结构。

VSCode 本身没有“pytest专用快捷键”,所有测试操作都依赖于 Python 扩展的测试功能配置是否到位——配错任何一项,Ctrl+Shift+T 打不开测试侧边栏、函数旁的 ▶ 按钮不出现、F5 调试直接报 ModuleNotFoundError。
为什么按 Ctrl+Shift+T 没反应或侧边栏空白
这不是快捷键失效,而是测试框架根本没被识别。VSCode 不会自动启用 pytest,必须手动声明类型并确保环境就绪:
-
python.testing.testFramework必须设为"pytest"(不是字符串拼写错误,不是大小写混用) -
python.testing.unittestEnabled必须为false,否则它强行 fallback 到 unittest 并忽略所有test_*.py -
python.testing.pytestEnabled建议显式设为true,部分旧版扩展仍依赖该开关 - 左下角 Python 解释器必须指向已安装 pytest 的环境(终端里
python -m pytest --version能成功返回) - 改完
.vscode/settings.json后,**必须点测试侧边栏右上角 ↻ 刷新按钮**,VSCode 不自动重扫
test_*.py 函数旁没出现 ▶ 或 ? 图标
图标不显示,说明 VSCode 没发现这个测试函数——常见原因不是快捷键问题,而是路径或命名规则不匹配:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
- 文件名必须严格符合
test_*.py或*_test.py(my_tests.py、test_main.py可以,但main_test.py不行) - 函数名必须以
test_开头,且不能带参数(除非用@pytest.mark.parametrize) -
python.testing.pytestArgs必须是 JSON 数组,例如["tests/", "-s"];写成字符串"tests/ -s"会静默失败,测试树为空 - 如果测试在
src/tests/,且conftest.py在src/下,pytestArgs得写成["--rootdir=src", "tests/"],只写["src/tests/"]会导致 fixture 加载失败,进而让整个测试模块不被识别
F5 调试单个测试函数时断点不命中或导入失败
这不是快捷键绑定问题,而是调试器启动时的工作目录(cwd)和 Python 路径不对:
立即学习“Python免费学习笔记(深入)”;
- VSCode 默认把
cwd设为测试文件所在目录,不是项目根目录 →from mypackage import x在终端能跑,F5 就报错 - 在
.vscode/settings.json中加:"python.testing.cwd": "${workspaceFolder}"(源码在根目录)或"python.testing.cwd": "${workspaceFolder}/src"(源码在src/) - 别在测试文件里写
sys.path.insert(0, "src")救急——它容易误提交,且不解决conftest.py加载、fixture 注入等深层问题 - launch.json 调试配置中,必须删掉
"program"字段,只保留"module": "pytest"和"args": ["tests/test_api.py::test_login", "-s"]
最常被忽略的其实是 cwd 和 --rootdir 的配合关系:一个控制 Python 导入路径,一个控制 pytest 的配置加载范围,两者不一致时,conftest.py 里的 fixture、hook 都不会生效,测试函数可能被发现,但运行时直接跳过或报错。

















