【问题标题】:Testing URLs - URLs that don't exist return 200测试 URL - 不存在的 URL 返回 200
【发布时间】:2013-10-11 04:46:37
【问题描述】:

我有一个功能可以测试我的网址,如下所示:

def test_URLs(self):

    routes = [
    'about/',
    'archive/',
    'index/',
    'admin/',
    ''
    'doesntExist/'
    ]

    for route in routes:
        response = self.client.get(route)
        self.assertEqual(response.status_code, 200)  

我的 URL 模式如下所示:

urlpatterns = patterns('',
    #CMS url
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', 'core.views.index'),
    url(r'^index/', 'core.views.index'),
    url(r'about/', 'core.views.about'),
    url(r'^archive/', 'core.views.archive'),
    url(r'^talks/(?P<slug>[\w\-]+)/$', 'core.views.getTalk'),

在我的 test_URLs 函数中,路由 'doesntExist/' 不存在,但恰如其分。当我运行我的服务器并尝试访问 doesntExist/ 时,我收到了日志消息

[04/Oct/2013 09:37:40] "GET /doesntExist/ HTTP/1.1" 404 2629

所以doesntExist/ 绝对不存在,当我运行上述测试时,我得到:

Creating test database for alias 'default'...
..
----------------------------------------------------------------------
Ran 2 tests in 0.017s

OK

为什么我的测试认为它存在?

【问题讨论】:

  • 这在很大程度上取决于self.client.get 中的代码,但是URL doesntExist/,前面没有任何主机名,可能会与您的ISP“试图提供帮助”发生冲突。它的 DNS 服务器可能会将不存在的主机名 doesntExist 解析到它自己的搜索页面。
  • 有趣。我试过做end_point = 'http://127.0.0.1:8000/' + route 并得到响应,但我仍然遇到同样的问题。我怎么能解决这个问题?
  • print self.client.get('/doesntExist/').content 打印什么?
  • 尝试将'/'放在routes中所有网址的前面。
  • @AndreyNelubin 它为我提供了似乎是我的 Amazon S3 存储桶的标记

标签: python django django-testing


【解决方案1】:

我的问题是我使用了一个名为 Lockdown 的应用程序。状态代码返回为 200,因为它正在获取登录 HTML 表单,如果用户之前未登录,则无论 URL 是什么都会显示该表单。

只是不要在测试时使用 Lockdown。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2020-10-05
    • 1970-01-01
    相关资源
    最近更新 更多