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

VSCode调试Pytest时测试方法内断点被跳过仅启动脚本断点可用如何解决

根因说明

ptvsd默认仅挂载启动时指定的入口进程,pytest运行测试用例会在独立的执行上下文(或子进程)中加载测试文件,调试器无法追踪到这部分进程空间,因此测试方法内的断点无法触发。

解决方案

方案1:直接通过ptvsd启动pytest(优先推荐)

跳过run_tests.py封装层,直接让调试器挂载pytest主进程,所有测试执行逻辑都会在同一个调试会话内运行,修改docker-compose.yml的entrypoint配置:

entrypoint: ["/usr/src/app/cvenv/bin/python3.8", "-m", "ptvsd", "--host", "0.0.0.0", "--port", "5678", "--wait", "-m", "pytest", "./integration_tests/"]

如果不需要保留run_tests.py中的自定义初始化逻辑,优先使用该方案。

方案2:开启ptvsd子进程调试(保留run_tests.py封装)

给ptvsd增加子进程追踪参数,让调试器自动挂载pytest拉起的所有子进程,修改docker-compose.yml的entrypoint,新增--enable-subprocess-debugging参数:

entrypoint: ["/usr/src/app/cvenv/bin/python3.8", "-m", "ptvsd", "--host", "0.0.0.0", "--port", "5678", "--wait", "--enable-subprocess-debugging", "./integration_tests/run_tests.py"]

同时修改run_tests.py中pytest.main的调用参数,关闭可能干扰调试的配置:

import pytest

if __name__ == "__main__":    
    # -s 关闭标准输出/错误捕获,--no-cov 关闭覆盖率插件避免字节码修改导致断点失效
    pytest.main(['-s', '--no-cov', './integration_tests/'])

方案3:代码内显式初始化调试器

如果上述方案不生效,可以将ptvsd初始化逻辑放到run_tests.py中,显式开启子进程调试支持:

import ptvsd
import pytest

# 初始化调试器
ptvsd.enable_attach(address=("0.0.0.0", 5678), redirect_output=True)
# 等待调试客户端连接
ptvsd.wait_for_attach()

if __name__ == "__main__":    
    pytest.main(['-s', '--no-cov', './integration_tests/'])

对应修改docker-compose.yml的entrypoint为直接启动脚本即可:

entrypoint: ["/usr/src/app/cvenv/bin/python3.8", "./integration_tests/run_tests.py"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:42:03