在 Python Web 开发中,良好的测试流程是保障项目质量的基石。如果你使用 Anaconda 管理依赖,并已创建了一个名为 web 的 Conda 虚拟环境(其中安装了 Django、Flask 等常用 Web 框架),那么本文将为你详细说明如何在 Windows 系统下的 VS Code 中,基于这个 web 环境高效地运行和调试 Django 单元测试。
🧰 前提条件
确保你的开发环境满足以下要求:
- 已安装 Anaconda 或 Miniconda
- 已创建并配置好名为
web的 Conda 虚拟环境(例如路径为D:\Anaconda3\envs\web) - 该环境中已通过
pip或conda安装了django(以及其他你可能用到的包,如flask) - 项目位于
D:\django\chapter03,包含manage.py - VS Code 中已安装官方 Python 扩展
bash#如果尚未安装 Django,可执行:可通过以下命令确认环境是否就绪: conda env list # 查看是否存在 web 环境 conda list -n web # 查看 web 环境中已安装的包如果尚未安装 Django,可执行
bashconda 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 解释器
- 打开命令面板(
Ctrl+Shift+P)- 输入
Python: Select Interpreter- 从列表中选择
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 djangoCommandError: 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 --noinputSQL 语法错误 / incomplete input自定义 Manager 或 Raw SQL 有误 在测试 shell 中调试: python manage.py shell --settings=chapter03.settings_test
🌐 附:VS Code 界面语言切换(可选)
虽然不影响代码生成或 Copilot 输出,但你可以将 VS Code 界面设为中文:
- 安装扩展:Chinese (Simplified) Language Pack for Visual Studio Code
- 按
Ctrl+Shift+P→ 输入Configure Display Language→ 选择zh-cn- 重启 VS Code
✅ 总结
借助 Anaconda 的
web虚拟环境,你可以在一个干净、可控的 Python 环境中同时管理多个 Web 项目依赖(如 Django 和 Flask)。结合 VS Code 强大的调试能力与 Django 的测试框架,你可以:
- 快速运行全部或部分测试
- 在内存数据库中安全执行测试
- 通过图形化界面单步调试测试逻辑
- 避免环境冲突和依赖污染