Django测试客户端返回404,但Shell中运行正常,求问题原因
Django测试时首页返回404但本地运行正常的问题排查
问题背景
本地通过python manage.py runserver运行项目时,访问首页路径/一切正常,但执行python manage.py test运行测试用例时,测试代码返回404错误,断言失败。
测试代码(test_urls.py)
from django.test import Client, TestCase class StaticURLTests(TestCase): def setUp(self): self.guest_client = Client() def test_homepage(self): response = self.guest_client.get("/") self.assertEqual(response.status_code, 200)
报错信息
❯ python manage.py test Creating test database for alias 'default'... System check identified no issues (0 silenced). F ====================================================================== FAIL: test_homepage (posts.tests.test_urls.StaticURLTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/finegorko/Development/Yandex.Practicum/hw03_forms/yatube/posts/tests/test_urls.py", line 10, in test_homepage self.assertEqual(response.status_code, 200) AssertionError: 404 != 200 ---------------------------------------------------------------------- Ran 1 test in 0.003s FAILED (failures=1) Destroying test database for alias 'default'...
可能的问题及解决方法
根路径URL未正确配置
检查项目根目录下的urls.py,确认根路径/是否映射到了正确的视图。比如是否存在如下配置:from django.contrib import admin from django.urls import path, include from posts.views import index # 假设首页视图为index urlpatterns = [ path('admin/', admin.site.urls), path('', index), # 确保根路径指向首页视图 # 或者通过include关联app的urls:path('', include('posts.urls')) ]如果根路径没有对应的URL配置,测试环境下访问
/就会返回404。目标app未添加到INSTALLED_APPS
打开项目的settings.py,检查INSTALLED_APPS列表是否包含你的posts应用:INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'posts', # 必须添加此行,否则Django无法识别app的URL配置 ]首页视图依赖数据库数据,测试库为空导致404
若首页视图中使用了get_object_or_404这类逻辑,当测试数据库中没有对应数据时,视图会返回404。可以检查视图代码,或者在测试的setUp方法中提前创建必要的测试数据。URL配置存在前缀冲突
如果项目主urls.py中给postsapp的URL添加了前缀(比如path('posts/', include('posts.urls'))),那么根路径/并不会指向posts的首页视图,此时需要修改测试用例中的请求路径(比如改为/posts/),或者调整主URL配置去掉前缀。
内容的提问来源于stack exchange,提问作者finegorko
相关产品推荐
相关产品推荐

