在 VS Code 中使用 Conda虚拟环境高效运行与调试 Django 单元测试

在 Python Web 开发中,良好的测试流程是保障项目质量的基石。如果你使用 Anaconda 管理依赖,并已创建了一个名为 web 的 Conda 虚拟环境(其中安装了 DjangoFlask 等常用 Web 框架),那么本文将为你详细说明如何在 Windows 系统下的 VS Code 中,基于这个 web 环境高效地运行和调试 Django 单元测试。


🧰 前提条件

确保你的开发环境满足以下要求:

  • 已安装 Anaconda 或 Miniconda
  • 已创建并配置好名为 web 的 Conda 虚拟环境(例如路径为 D:\Anaconda3\envs\web
  • 该环境中已通过 pipconda 安装了 django(以及其他你可能用到的包,如 flask
  • 项目位于 D:\django\chapter03,包含 manage.py
  • VS Code 中已安装官方 Python 扩展
bash 复制代码
#如果尚未安装 Django,可执行:可通过以下命令确认环境是否就绪:
conda env list          # 查看是否存在 web 环境
conda list -n web       # 查看 web 环境中已安装的包

如果尚未安装 Django,可执行

bash 复制代码
conda run -n web pip install django
# 或批量安装 requirements.txt 中的依赖
conda run -n web pip install -r requirements.txt

推荐测试运行方式

方式一:使用 conda run(无状态、适合脚本或 CI)

无需激活环境,直接在指定 Conda 环境中运行测试,推荐用于自动化场景:

复制代码
复制代码
# 运行全部测试
conda run -n web python manage.py test

# 使用独立的内存 SQLite 测试配置(推荐)
conda run -n web python manage.py test --settings=chapter03.settings_test

方式二:交互式终端(适合本地开发调试)

先激活 web 环境,再逐条执行命令:

复制代码
复制代码
conda activate web
python manage.py migrate --settings=chapter03.settings_test --noinput
python manage.py test --settings=chapter03.settings_test

✅ 激活后,所有 python 命令都会自动使用 web 环境中的解释器和包。


🎯 运行特定测试用例

Django 支持非常灵活的测试粒度控制:

复制代码
# 测试整个 app(如 books)
python manage.py test books --settings=chapter03.settings_test

# 测试某个 TestCase 类
python manage.py test books.tests.CountryManagerTestCase --settings=chapter03.settings_test

# 仅运行单个测试方法
python manage.py test books.tests.CountryManagerTestCase.test_country_name_prefix --settings=chapter03.settings_test

# 使用关键字筛选(需 pytest 风格支持,Django 4.2+ 原生支持 -k)
python manage.py test -k test_country_name_prefix --settings=chapter03.settings_test

🐞 在 VS Code 中调试测试

步骤 1:选择正确的 Python 解释器

  1. 打开命令面板(Ctrl+Shift+P
  2. 输入 Python: Select Interpreter
  3. 从列表中选择 web 环境对应的解释器(通常显示为 Python 3.x.x ('web': conda) 或完整路径 D:\Anaconda3\envs\web\python.exe

步骤 2:配置调试启动项(.vscode/launch.json)在项目根目录创建 .vscode/launch.json 文件,添加以下配置:

bash 复制代码
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Django: Single Test (sqlite)",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/manage.py",
      "args": [
        "test",
        "books.tests.CountryManagerTestCase.test_country_name_prefix",
        "--settings=chapter03.settings_test"
      ],
      "django": true,
      "console": "integratedTerminal",
      "env": {
        "PYTHONPATH": "${workspaceFolder}"
      }
    },
    {
      "name": "Django: All Tests (sqlite)",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/manage.py",
      "args": [
        "test",
        "--settings=chapter03.settings_test"
      ],
      "django": true,
      "console": "integratedTerminal",
      "env": {
        "PYTHONPATH": "${workspaceFolder}"
      }
    },
    {
      "name": "Django: App Tests (books)",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/manage.py",
      "args": [
        "test",
        "books",
        "--settings=chapter03.settings_test"
      ],
      "django": true,
      "console": "integratedTerminal",
      "env": {
        "PYTHONPATH": "${workspaceFolder}"
      }
    }
  ]
}

配置完成后,打开 VS Code 左侧的"运行和调试"面板,选择对应配置,点击 ▶️ 即可启动调试会话,并在断点处暂停。


🗃️ 关于 settings_test.py:隔离测试数据库

为避免测试污染开发或生产数据库,建议使用独立的测试配置文件 chapter03/settings_test.py

复制代码
from .settings import *

# 覆盖数据库配置:使用内存 SQLite
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': ':memory:',  # 内存数据库,每次测试自动重建
    }
}

优势:

  • 零外部依赖:无需启动 MySQL/PostgreSQL
  • 速度快:内存操作远快于磁盘 I/O
  • 完全隔离:每次测试都从干净状态开始

🔁 若需连接真实数据库进行集成测试,可改用默认 settings 并确保数据库服务可用。


常见问题与排查

问题 原因 解决方案
ModuleNotFoundError: No module named 'django' 当前 Python 环境未安装 Django 确保在 web 环境中执行 pip install django
CommandError: You must set settings.ALLOWED_HOSTS... 测试配置未继承完整设置 检查 settings_test.py 是否正确 from .settings import *
no such table: books_country 测试数据库未应用迁移 先运行 python manage.py migrate --settings=chapter03.settings_test --noinput
SQL 语法错误 / incomplete input 自定义 Manager 或 Raw SQL 有误 在测试 shell 中调试: python manage.py shell --settings=chapter03.settings_test

🌐 附:VS Code 界面语言切换(可选)

虽然不影响代码生成或 Copilot 输出,但你可以将 VS Code 界面设为中文:

  1. 安装扩展:Chinese (Simplified) Language Pack for Visual Studio Code
  2. Ctrl+Shift+P → 输入 Configure Display Language → 选择 zh-cn
  3. 重启 VS Code

✅ 总结

借助 Anaconda 的 web 虚拟环境,你可以在一个干净、可控的 Python 环境中同时管理多个 Web 项目依赖(如 Django 和 Flask)。结合 VS Code 强大的调试能力与 Django 的测试框架,你可以:

  • 快速运行全部或部分测试
  • 在内存数据库中安全执行测试
  • 通过图形化界面单步调试测试逻辑
  • 避免环境冲突和依赖污染
相关推荐
给我来一根18 小时前
用户认证与授权:使用JWT保护你的API
jvm·数据库·python
白云千载尽19 小时前
LQR与MPC.入门知识与实验
python·控制·mpc·lqr
weixin_4331793319 小时前
Hangman 猜字游戏使用列表List实现
开发语言·python
52Hz11820 小时前
二叉树理论、力扣94.二叉树的中序遍历、104.二叉树的最大深度、226.反转二叉树、101.对称二叉树
python·算法·leetcode
卖个几把萌20 小时前
解决 Python 项目依赖冲突:使用 pip-tools 一键生成现代化的 requirements.txt
开发语言·python·pip
黎雁·泠崖20 小时前
Java字符串入门:API入门+String类核心
java·开发语言·python
哈哈不让取名字20 小时前
用Pygame开发你的第一个小游戏
jvm·数据库·python
程序员敲代码吗20 小时前
Python异步编程入门:Asyncio库的使用
jvm·数据库·python
sunfove20 小时前
Python小游戏:在 2048 游戏中实现基于线性插值(Lerp)的平滑动画
开发语言·python·游戏
2501_9445264220 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 抽牌游戏实现
android·开发语言·python·flutter·游戏