点击 Debug Test 没反应,主因是工作目录与 sys.path 不匹配;需配置 "python.testing.cwd" 或 PYTHONPATH,并手动刷新测试面板。

点击 Debug Test 没反应?先看工作目录和模块导入路径
VSCode 的 Debug Test 按钮本质是调用 pytest 或 unittest 命令行,并附加调试器。如果点击后无响应、报 ModuleNotFoundError,或断点直接跳过,90% 是当前工作目录(cwd)与 Python 的 sys.path 不匹配导致的。
- VSCode 默认以打开的文件夹为工作目录,但你的测试里写的是
from src.mymodule import func,而src/并不在sys.path中 - 解决方法:在
.vscode/settings.json中显式指定"python.testing.cwd",例如:"python.testing.cwd": "src"
- 或者更通用的做法:把
src/加进PYTHONPATH,在 settings.json 里加"python.defaultEnvironment": {"PYTHONPATH": "${workspaceFolder}/src"}(注意:这是非标准字段,部分版本需配合python.envFile使用) - 临时验证:在测试文件顶部加
import sys; print(sys.path),运行时看输出是否包含你期望的路径
断点不生效?检查测试框架启动方式和断点位置
断点打在测试函数里却没停住,不是 VSCode 调试器坏了,而是你没让调试器“真正进入”那段代码执行流。
-
pytest下,断点只能打在test_*函数内部、fixture 调用之后;别打在conftest.py的 fixture 定义里——除非你加了--capture=no且启用pytest-pdb - 异步测试(
async def test_*)必须用pytest-asyncio,否则调试器会直接跳过整个函数 - 如果你手动写了
if __name__ == "__main__"并在里面调用pytest.main(),那Debug Test按钮完全不走这条路——它绕过你的入口,直连 pytest runner - 确认已启用对应框架:比如用了
pytest,但settings.json里还留着"python.testing.unittestEnabled": true,会导致测试发现失败,自然也没法调试
测试面板空白或不刷新?不是插件问题,是缓存没清
改完测试文件名、挪动了 tests/ 目录、甚至更新了 settings.json,VSCode 测试侧边栏依然显示旧内容或一片空白——这不是 bug,是它根本没重新扫描。
- VSCode 的测试面板**不会自动刷新**。哪怕你保存了新写的
test_math.py,只要没手动触发,它就当不存在 - 必须点击测试侧边栏右上角那个
↻刷新按钮(或按Ctrl+Shift+P→ 输入Python: Discover Tests) - 如果刷新后仍不显示,检查文件名是否符合默认模式:
test_*.py或*_test.py;mytest.py就不会被识别 - 多根工作区下,测试只在当前激活的根目录里扫描,其他文件夹里的测试不会跨区出现
Python + pytest 调试配置的关键参数
图形化向导配出来的设置经常不够用,尤其当项目结构非标准时,得手动调整 settings.json 里的几个核心字段。
-
"python.testing.pytestArgs":控制 pytest 怎么找测试,常用值:["--rootdir=.", "-s", "tests/"]
其中-s允许print()输出,调试时必需;--rootdir=.显式指定根目录,避免路径歧义 -
"python.testing.cwd":决定命令执行时的当前目录,直接影响相对路径导入,如from config import settings -
"python.testing.pytestPath":如果你装了多个 Python 环境,或 pytest 在虚拟环境外,这里要填绝对路径,例如:"${workspaceFolder}/venv/bin/pytest"(Windows 下是Scripts\pytest.exe) - 别漏掉
"python.testing.pytestEnabled": true,否则整个测试功能处于关闭状态,按钮灰掉也不奇怪
最常被忽略的一点:改完任何一项配置,包括移动测试文件、重命名、新增 __init__.py,都得点那个 ↻ 刷新——不是 VSCode 卡,是你没告诉它“该重新看了”。


















