系列:Python Web 工程实践
- Python Web 项目配置管理:环境变量、.env 和生产配置怎么拆
- Python Web 项目如何连接数据库:SQLAlchemy、Django ORM、迁移怎么选
- Alembic 数据库迁移入门:表结构变更怎么安全上线
- Django 数据库迁移实战:makemigrations 和 migrate 背后的坑
- FastAPI 项目测试指南:pytest、TestClient、依赖覆盖怎么用
- Django 测试入门:Model、View、API 测试怎么写
- FastAPI 分层架构:router、service、repository 怎么拆
- PostgreSQL 基础:索引、事务、慢查询怎么理解
Django 项目有一套成熟的测试工具。刚开始不用追求覆盖率很高,先把模型规则、核心视图和 API 行为测起来,就能少掉很多低级回归。
如果你还在熟悉 Django,可以先看 Django 安装与使用指南。
Model 测试
模型测试适合验证字段默认值、方法和约束。
from django.test import TestCase
from blog.models import Article
class ArticleModelTest(TestCase): def test_slug_is_unique(self): Article.objects.create(title="A", slug="hello")
with self.assertRaises(Exception): Article.objects.create(title="B", slug="hello")如果模型有业务方法,也应该测返回结果。
def test_article_display_title(self): article = Article(title="Hello", slug="hello")
self.assertEqual(str(article), "Hello")View 测试
普通页面可以用 Django 测试客户端。
from django.test import TestCasefrom django.urls import reverse
class ArticleViewTest(TestCase): def test_article_list_page(self): response = self.client.get(reverse("article-list"))
self.assertEqual(response.status_code, 200) self.assertContains(response, "文章")不要只测 200。页面上关键文案、跳转、空状态都可以顺手测一下。
登录状态
需要登录的页面,要分别测匿名用户和已登录用户。
from django.contrib.auth import get_user_model
def test_dashboard_requires_login(self): response = self.client.get(reverse("dashboard"))
self.assertEqual(response.status_code, 302)
def test_dashboard_logged_in(self): user = get_user_model().objects.create_user("u", password="pass") self.client.force_login(user)
response = self.client.get(reverse("dashboard"))
self.assertEqual(response.status_code, 200)force_login 适合测试业务页面,不需要每次都走登录表单。
DRF API 测试
如果项目用了 Django REST Framework,可以用 APIClient。
from rest_framework.test import APITestCase
class ArticleApiTest(APITestCase): def test_list_articles(self): response = self.client.get("/api/articles/")
self.assertEqual(response.status_code, 200)DRF 入门可以参考 Django REST Framework 入门:把 Django 做成 API。
哪些测试最值得先写
优先级可以这样排:
- 登录、权限、鉴权
- 核心创建和修改流程
- 关键模型规则
- API 参数校验
- 页面空状态和异常状态
总结
Django 测试的收益在回归阶段很明显。只要项目开始有迁移、权限和 API,就应该把测试加进日常开发流程。先覆盖登录、权限和核心写入流程,通常比追求高覆盖率更实用。