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

如何为Django ListView列表视图编写集成测试(附示例)

Django HomeView 集成测试参考实现

以下测试用例基于Django自带测试框架编写,覆盖视图核心逻辑,可直接放在对应app的tests.py或测试目录下的视图测试文件中使用。

测试覆盖核心场景

  • 无参数访问时视图正常响应、模板渲染正确、上下文变量符合预期
  • 分页逻辑(每页10条)运行正常
  • 携带q参数时,多字段模糊搜索逻辑生效,搜索关键词正确传入上下文
  • 无匹配搜索结果时返回空列表不报错

测试代码示例

from django.test import TestCase, Client
from django.urls import reverse
from .models import Donor


class HomeViewTest(TestCase):
    def setUp(self):
        # 初始化测试客户端、视图访问路径
        self.client = Client()
        # 注意:将reverse内的'home'替换为你项目中HomeView绑定的URL name值
        self.view_url = reverse('home')
        
        # 构造测试基础数据,共13条,满足分页测试场景
        self.test_donor1 = Donor.objects.create(
            name="张三", location="北京", sex="男", age=28, blood_group="A型"
        )
        self.test_donor2 = Donor.objects.create(
            name="李四", location="上海", sex="男", age=32, blood_group="B型"
        )
        self.test_donor3 = Donor.objects.create(
            name="王五", location="广州", sex="女", age=25, blood_group="O型"
        )
        for idx in range(10):
            Donor.objects.create(
                name=f"测试捐血者{idx}", location="深圳", sex="男", 
                age=20+idx, blood_group="AB型"
            )

    def test_base_view_response(self):
        """测试无参数访问视图的基础响应"""
        resp = self.client.get(self.view_url)
        # 校验状态码为200
        self.assertEqual(resp.status_code, 200)
        # 校验使用正确模板
        self.assertTemplateUsed(resp, 'recipient/home.html')
        # 校验上下文存在donors变量
        self.assertIn('donors', resp.context)
        # 校验无搜索参数时q值为None
        self.assertIsNone(resp.context['q'])

    def test_pagination_logic(self):
        """测试分页逻辑正确性"""
        # 第一页应返回10条数据
        resp_page1 = self.client.get(self.view_url)
        self.assertEqual(len(resp_page1.context['donors']), 10)
        # 第二页应返回剩余3条数据
        resp_page2 = self.client.get(f"{self.view_url}?page=2")
        self.assertEqual(resp_page2.status_code, 200)
        self.assertEqual(len(resp_page2.context['donors']), 3)

    def test_search_filter_logic(self):
        """测试多字段搜索逻辑正确性"""
        # 按姓名搜索
        resp_name = self.client.get(f"{self.view_url}?q=张三")
        self.assertEqual(resp_name.status_code, 200)
        self.assertEqual(len(resp_name.context['donors']), 1)
        self.assertEqual(resp_name.context['donors'][0].name, "张三")
        self.assertEqual(resp_name.context['q'], "张三")

        # 按血型搜索
        resp_blood = self.client.get(f"{self.view_url}?q=B型")
        self.assertEqual(len(resp_blood.context['donors']), 1)
        self.assertEqual(resp_blood.context['donors'][0].blood_group, "B型")

        # 按地点搜索
        resp_loc = self.client.get(f"{self.view_url}?q=广州")
        self.assertEqual(len(resp_loc.context['donors']), 1)
        self.assertEqual(resp_loc.context['donors'][0].location, "广州")

        # 无匹配结果场景
        resp_empty = self.client.get(f"{self.view_url}?q=不存在的关键词xyz")
        self.assertEqual(len(resp_empty.context['donors']), 0)

测试运行说明

  • 全量运行项目测试:在项目根目录执行命令python manage.py test
  • 仅运行当前视图测试:执行命令python manage.py test 你的app名称.tests.HomeViewTest
  • 运行前注意替换代码中URL反向解析的参数值,测试数据的字段赋值要和Donor模型的字段约束保持一致,避免测试数据创建失败。

内容的提问来源于stack exchange,提问作者syed towfiqur rahim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:51:31