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

如何为Django项目中返回JSON数据的URL编写单元测试

Django JSON类型接口的单元测试编写方法

测试json_list这类返回模型JSON数据的路由,核心校验三个维度即可:路由可访问性、响应格式正确性、返回数据准确性,直接在对应app的tests.py里写测试用例就行,用Django自带的测试框架不需要额外依赖。


基础测试用例示例

from django.test import TestCase
from django.urls import reverse
from .models import 你的模型类  # 替换成你视图里用到的实际模型,比如Article、Goods

class JsonListRouteTest(TestCase):
    def setUp(self):
        # 测试前置操作:构造隔离的测试数据,测试结束后会自动清理,不会影响现有数据库数据
        self.test_data1 = 你的模型类.objects.create(
            # 填入模型必填字段,比如title="测试内容1", content="测试正文1"
        )
        self.test_data2 = 你的模型类.objects.create(
            # title="测试内容2", content="测试正文2"
        )
        # 通过路由名反向解析地址,后续路由前缀调整时不需要修改测试代码
        self.target_url = reverse("json_list")

    def test_route_normal_access(self):
        """校验路由可以正常访问,响应格式为JSON"""
        resp = self.client.get(self.target_url)
        # 校验状态码为200
        self.assertEqual(resp.status_code, 200)
        # 校验响应头为JSON格式
        self.assertEqual(resp["Content-Type"], "application/json")

    def test_response_data_correct(self):
        """校验返回的JSON内容和数据库数据一致"""
        resp = self.client.get(self.target_url)
        resp_json = resp.json()
        
        # 如果你的接口直接返回模型列表,就直接校验长度
        self.assertEqual(len(resp_json), 2)
        # 逐字段匹配数据即可,示例:
        # self.assertEqual(resp_json[0]["title"], self.test_data1.title)
        # self.assertEqual(resp_json[1]["title"], self.test_data2.title)

常见场景适配

  • 如果接口需要登录才能访问,在setUp方法里加测试用户登录逻辑即可:
from django.contrib.auth.models import User

# setUp里追加
self.test_user = User.objects.create_user(username="testuser", password="testpass123")
self.client.login(username="testuser", password="testpass123")
  • 如果接口返回带统一外层包装(比如{"code": 0, "data": [数据列表], "msg": "success"}),校验内容时先取对应字段再匹配,比如拿resp_json["data"]做数据长度、字段的校验。
  • 不要在测试里硬编码写死/list/作为请求地址,始终用reverse通过路由名解析地址,避免后续路由调整导致测试失效。

内容的提问来源于stack exchange,提问作者Ivan Campelo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:21:34