怎么在VSCode中配置Python的单元测试?_Pytest与Unittest框架【教程】

发布时间 - 2026-01-21 00:00:00    点击率:
VSCode需正确配置Python解释器、启用对应测试框架(pytest/unittest)并遵循文件命名规则,才能在侧边栏集成测试发现与运行;关键在于解释器路径、settings.json声明及测试结构匹配。

VSCode 本身不自带 Python 单元测试运行能力,但能通过配置 settings.json 和正确安装依赖,让测试发现、运行、调试完全集成到侧边栏和命令面板中——关键不是装插件,而是让 VSCode 知道“测试在哪、用什么跑、怎么找”。

确认 Python 扩展已启用且解释器正确

VSCode 的 Python 测试功能由官方 ms-python.python 扩展提供,不是第三方插件。如果测试图标(⚡ 图标)不出现,大概率是解释器没选对或扩展未激活。

  • Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Python: Select Interpreter,选中你项目实际使用的 Python 环境(如 ./venv/bin/pythonconda env 路径)
  • 确保该环境下已安装 pytestunittest:在终端执行 pip list | grep -i pytestpython -m unittest --help 验证
  • 若使用 conda,注意 VSCode 可能默认选系统 Python,而非 conda env 中的解释器——必须手动指定

在 settings.json 中声明测试框架类型和路径

VSCode 不会自动猜你用的是 pytest 还是 unittest,必须显式声明。配置写在工作区或用户级 settings.json 中,优先级:工作区 > 用户。

  • 打开设置(Ctrl+,),点击右上角「打开设置 (JSON)」图标,添加以下字段:
  • pytest
    "python.testing.pytestEnabled": true,
    "python.testing.pytestArgs": [
        "./tests",
        "-v"
    ],
    其中 ./tests 是你的测试目录路径,可替换为 "src/tests" 等;-v 是可选参数,加了才显示详细输出
  • unittest
    "python.testing.unittestEnabled": true,
    "python.testing.unittestArgs": [
        "-s",
        "./tests",
        "-p",
        "test_*.py"
    ],
    -s 指定起始目录,-p 指定匹配模式(注意:不支持 **/test_*.py 这种 glob,只认单层通配)
  • 禁用另一个框架:比如启用了 pytest,务必设 "python.testing.unittestEnabled": false,否则可能冲突报错 Test discovery failed: multiple test frameworks enabled

测试文件命名与结构必须符合框架约定

VSCode 的测试发现完全依赖底层框架规则。即使配置全对,文件放错位置或命名不对,测试列表就是空的。

  • pytest 默认只找:test_*.py*_test.py 文件,且文件内函数或类名需以 test_ 开头;测试目录下建议有 __init__.py(非必须但避免导入问题)
  • unittest 要求更严格:测试类必须继承 unittest.TestCase,方法名必须是 test_*,且文件名必须匹配 unittestAr

    gs
    中的 -p 模式(例如设了 "test_*.py",就不能叫 example_tests.py
  • 常见坑:tests/ 目录不在 Python path 中 → 导入被测模块失败;解决办法是在测试文件开头加:
    import sys
    from pathlib import Path
    sys.path.insert(0, str(Path(__file__).parent.parent))
    或在根目录放 pyproject.toml 声明 [tool.setuptools.py_modules]

运行与调试测试时注意环境隔离

点击测试旁的 ▶️ 或 ? 图标时,VSCode 会调用当前选中的 Python 解释器执行命令。如果你在虚拟环境中安装了 pytest,但解释器指向全局 Python,就会报 ModuleNotFoundError: No module named 'pytest'

  • 检查底部状态栏:左边应显示类似 Python 3.11.5 ('venv': venv),括号里有环境标识才算生效
  • 调试单个测试函数时,VSCode 会生成临时 launch config,但断点只在测试代码里有效——被测模块若在其他包中,需确保其源码可访问(不能只装 wheel)
  • 想看 print() 输出?在 pytestArgs-s(捕获关闭),或加 --log-cli-level=INFO 查看日志

最常卡住的地方不是配置语法,而是解释器路径和测试文件结构不匹配。每次改完 settings.json,记得重启 VSCode 窗口(不是重载窗口),再点「Python Test Explorer」侧边栏刷新按钮——它不会自动轮询配置变更。


# linux  # python  # vscode  # js  # json  # windows  # mac  # ai  # macos  # win  # 虚拟环境 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: js代码实现下拉菜单【推荐】  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  利用vue写todolist单页应用  微信小程序 input输入框控件详解及实例(多种示例)  微信小程序 scroll-view组件实现列表页实例代码  linux top下的 minerd 木马清除方法  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  利用JavaScript实现拖拽改变元素大小  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  想要更高端的建设网站,这些原则一定要坚持!  jquery插件bootstrapValidator表单验证详解  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  无锡营销型网站制作公司,无锡网选车牌流程?  如何用景安虚拟主机手机版绑定域名建站?  如何快速辨别茅台真假?关键步骤解析  装修招标网站设计制作流程,装修招标流程?  Laravel如何创建自定义Artisan命令?(代码示例)  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  如何做网站制作流程,*游戏网站怎么搭建?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  如何在万网ECS上快速搭建专属网站?  如何在IIS中新建站点并解决端口绑定冲突?  如何在服务器上配置二级域名建站?  如何快速选择适合个人网站的云服务器配置?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  如何在VPS电脑上快速搭建网站?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  中山网站制作网页,中山新生登记系统登记流程?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Laravel如何升级到最新版本?(升级指南和步骤)  如何在建站之星绑定自定义域名?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  微信小程序 wx.uploadFile无法上传解决办法  Android 常见的图片加载框架详细介绍  香港服务器网站生成指南:免费资源整合与高速稳定配置方案