当 'manage.py shell' 且浏览器不支持时,pytest 出现 404 失败
404 fail with pytest when 'manage.py shell' and browser don't
我想使用 pytest 来测试我正在开发的网络应用程序。我从小做起:
def test_loading_page(client):
response = client.get('/')
assert response.status_code == 200
assert b'Congratulations on your first Django' in response.content
根据 pytest 的输出,这看起来像预期的那样工作:
platform win32 -- Python 3.6.1, pytest-3.0.7, py-1.4.33, pluggy-0.4.0
Django settings: test_project.settings (from ini file)
rootdir: C:\--\---\---\---\---\---, inifile: pytest.ini
plugins: django-3.1.2
collected 1 items
test_project.py F
================================== FAILURES ===================================
______________________________ test_loading_page _______________________________
client = <django.test.client.Client object at 0x000002440F0A17F0>
def test_loading_page(client):
response = client.get('/')
> assert response.status_code == 200
E assert 404 == 200
E + where 404 = <HttpResponseNotFound status_code=404, "text/html">.status_code
test_test_project.py:7: AssertionError
========================== 1 failed in 0.36 seconds ===========================
因此,当 django 开发服务器为 运行 时,test_loading_page 由于 404 而失败。如果使用我的浏览器转到 http://127.0.0.1:8000/,则会显示加载页面。此外,如果我使用 python manage.py shell,则以下代码会正确运行:
from django.test import Client
client = Client()
response = client.get('/')
response.status_code == 200 #Returns True
如果有用,pytest.ini 文件包含:
[pytest]
DJANGO_SETTINGS_MODULE = flawlesslinguistics.settings
并且 urls.py 文件是默认的:
从django.conf.urls导入url
来自 django.contrib 导入管理员
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
我使用的版本是:
Python 3.6.1
pytest-3.0.7
django-3.1.2
很难确定哪些 articles/docs 指的是 pytest,哪些是针对使用 unittest 的 django 内置测试框架。非常感谢专家的任何帮助。
我认为 Pytest 和 Django 需要一些帮助才能协同工作。查看 pytest-django 插件以简化操作。
如果这样:
def test_loading_page(client):
response = client.get('/')
assert response.status_code == 200
assert b'Congratulations on your first Django' in response.content
是你的 views.py 那么你还没有将此视图映射到 urls.py
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^test_loading_page/$', views.test_loading_page),
]
根据您应用的总体设置,您是否有多个 urls.py 一个在 mainproject 中,一个在 myapp 中。您可能需要 'include' 并映射 url。
根据noes1s的问题,我调查了urls.py链。
我在项目应用程序中添加了一个占位符视图,并通过以下更改将它们连接起来:
Test_project_urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^test_project_app/', include('test_project_app.urls')),
url(r'^admin/', admin.site.urls),
]
Test_project_app_urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
Test_project_app_views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Congratulations on your first Django")
因此,通过这些更改,pytest 按预期工作。看来这里的问题是,典型的默认 django 页面无法像创建自定义视图并与 urls.py 文件连接一样访问。
请注意初始测试需要稍作改动才能按预期工作:
def test_loading_page(client):
response = client.get('/test_project_app/')
assert response.status_code == 200
assert 'Congratulations on your first Django' in str(response.content)
我想使用 pytest 来测试我正在开发的网络应用程序。我从小做起:
def test_loading_page(client):
response = client.get('/')
assert response.status_code == 200
assert b'Congratulations on your first Django' in response.content
根据 pytest 的输出,这看起来像预期的那样工作:
platform win32 -- Python 3.6.1, pytest-3.0.7, py-1.4.33, pluggy-0.4.0
Django settings: test_project.settings (from ini file)
rootdir: C:\--\---\---\---\---\---, inifile: pytest.ini
plugins: django-3.1.2
collected 1 items
test_project.py F
================================== FAILURES ===================================
______________________________ test_loading_page _______________________________
client = <django.test.client.Client object at 0x000002440F0A17F0>
def test_loading_page(client):
response = client.get('/')
> assert response.status_code == 200
E assert 404 == 200
E + where 404 = <HttpResponseNotFound status_code=404, "text/html">.status_code
test_test_project.py:7: AssertionError
========================== 1 failed in 0.36 seconds ===========================
因此,当 django 开发服务器为 运行 时,test_loading_page 由于 404 而失败。如果使用我的浏览器转到 http://127.0.0.1:8000/,则会显示加载页面。此外,如果我使用 python manage.py shell,则以下代码会正确运行:
from django.test import Client
client = Client()
response = client.get('/')
response.status_code == 200 #Returns True
如果有用,pytest.ini 文件包含:
[pytest]
DJANGO_SETTINGS_MODULE = flawlesslinguistics.settings
并且 urls.py 文件是默认的:
从django.conf.urls导入url 来自 django.contrib 导入管理员
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
我使用的版本是:
Python 3.6.1
pytest-3.0.7
django-3.1.2
很难确定哪些 articles/docs 指的是 pytest,哪些是针对使用 unittest 的 django 内置测试框架。非常感谢专家的任何帮助。
我认为 Pytest 和 Django 需要一些帮助才能协同工作。查看 pytest-django 插件以简化操作。
如果这样:
def test_loading_page(client):
response = client.get('/')
assert response.status_code == 200
assert b'Congratulations on your first Django' in response.content
是你的 views.py 那么你还没有将此视图映射到 urls.py
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^test_loading_page/$', views.test_loading_page),
]
根据您应用的总体设置,您是否有多个 urls.py 一个在 mainproject 中,一个在 myapp 中。您可能需要 'include' 并映射 url。
根据noes1s的问题,我调查了urls.py链。
我在项目应用程序中添加了一个占位符视图,并通过以下更改将它们连接起来:
Test_project_urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^test_project_app/', include('test_project_app.urls')),
url(r'^admin/', admin.site.urls),
]
Test_project_app_urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
Test_project_app_views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Congratulations on your first Django")
因此,通过这些更改,pytest 按预期工作。看来这里的问题是,典型的默认 django 页面无法像创建自定义视图并与 urls.py 文件连接一样访问。
请注意初始测试需要稍作改动才能按预期工作:
def test_loading_page(client):
response = client.get('/test_project_app/')
assert response.status_code == 200
assert 'Congratulations on your first Django' in str(response.content)