You need to enable JavaScript to run this app. 如何测试Django视图函数在RedirectUrl不存在时返回HTTP404
优惠活动
大模型
产品
解决方案
定价
更多

如何测试Django视图函数在RedirectUrl不存在时返回HTTP404

Django 视图函数测试实现方案

基于Django原生的TestCase类即可完成你需要的所有逻辑测试,无需引入额外第三方库。

前置修正说明

你现有代码存在2处需要先对齐的问题,避免测试无法通过:

  • 视图clickActivity中使用的redirect_url.test_check_url字段,在模型定义中实际命名为symptom_check_url,需要修正字段名保持一致,否则会触发属性不存在的报错。
  • 你描述的业务场景中whatsappid是查询参数(?whatsappid=xxx),但当前路由和视图是将whatsappid作为路径参数接收,若需要兼容查询参数的传参方式,可调整视图从request.GET.get('whatsappid')取值,同步修改路由配置去掉路径中的<int:whatsappid>段。

测试代码示例

在你的应用下新建tests.py文件,写入以下代码:

from django.test import TestCase
from django.urls import reverse
from .models import RedirectUrl, RedirectUrlsEntry

class ClickActivityTest(TestCase):
    def setUp(self):
        # 提前创建测试用的RedirectUrl实例
        self.test_redirect_url = RedirectUrl.objects.create(
            symptom_check_url="https://test_check.co.za"
        )
        self.valid_pk = self.test_redirect_url.pk
        self.invalid_pk = 9999 # 不存在的主键
        self.test_whatsappid = 12345

    def test_redirect_url_not_exist_return_404(self):
        # 测试不存在的RedirectUrl返回404
        url = reverse('ada_hook_redirect', args=[self.invalid_pk, self.test_whatsappid])
        response = self.client.get(url)
        self.assertEqual(response.status_code, 404)

    def test_redirect_url_exist_redirect_correctly(self):
        # 测试跳转逻辑正确
        url = reverse('ada_hook_redirect', args=[self.valid_pk, self.test_whatsappid])
        response = self.client.get(url)
        # 断言状态码是302重定向
        self.assertEqual(response.status_code, 302)
        # 断言跳转目标URL正确
        expected_url = f"https://test_check.co.za/?whatsappid={self.test_whatsappid}"
        self.assertRedirects(response, expected_url, fetch_redirect_response=False)

    def test_access_log_saved_correctly(self):
        # 测试访问记录存储正确
        # 请求前统计记录数
        initial_count = RedirectUrlsEntry.objects.filter(url=self.test_redirect_url).count()
        url = reverse('ada_hook_redirect', args=[self.valid_pk, self.test_whatsappid])
        self.client.get(url)
        # 请求后统计记录数
        new_count = RedirectUrlsEntry.objects.filter(url=self.test_redirect_url).count()
        # 断言新增1条记录
        self.assertEqual(new_count, initial_count + 1)
        # 断言新增记录关联的RedirectUrl正确
        latest_entry = RedirectUrlsEntry.objects.latest('time_stamp')
        self.assertEqual(latest_entry.url, self.test_redirect_url)

运行测试

在项目根目录执行命令python manage.py test 你的应用名即可运行上述测试用例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 01:06:04