代码之家  ›  专栏  ›  技术社区  ›  user3535074

404“管理”时pytest失败。py shell和浏览器没有

  •  0
  • user3535074  · 技术社区  · 7 年前

    我想用pytest测试我正在开发的一个web应用程序。我从小事做起:

    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 ===========================
    

    http://127.0.0.1:8000/ 将显示加载页面。如果我使用python管理。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
    

    和URL。默认为py文件:

    来自django。conf.url导入url 来自django。contrib导入管理

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
    ]
    

    Python 3.6.1

    pytest-3.0.7

    django-3.1.2

    很难确定哪些文章/文档引用了pytest,哪些是django使用unittest构建的测试框架。任何专家的帮助都将不胜感激。

    3 回复  |  直到 7 年前
        1
  •  0
  •   noes1s    7 年前

    如果:

    def test_loading_page(client):
        response = client.get('/')
        assert response.status_code == 200
        assert b'Congratulations on your first Django' in response.content
    

    是你的观点。那么您还没有将此视图映射到URL。py公司

    URL。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),
    ]
    

    根据应用程序的总体设置,您是否有多个URL。一个在mainproject中,一个在myapp中。您可能需要“包含”并映射URL。

        2
  •  0
  •   Don Kirkby    7 年前

    我认为Pytest和Django需要一些帮助才能一起工作。查看 pytest-django 插件,使其更容易。

        3
  •  0
  •   user3535074    7 年前

    基于NOES1提出的问题,我调查了URL。py链。

    我在一个项目应用程序中添加了一个占位符视图,并用以下更改将其连接起来:

    测试项目URL。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\u project\u app\u URL。py公司

    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'^$', views.index, name='index'),
    ]
    

    Test\u project\u app\u视图。py公司

    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse("Congratulations on your first Django")
    

    因此,随着这些变化,pytest按预期工作。这里的问题似乎是,典型的默认django页面在创建和连接URL时,无法以与自定义视图相同的方式访问。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)