【问题标题】:AssertionError: 200 != 403断言错误:200!= 403
【发布时间】:2015-11-01 09:21:59
【问题描述】:

有 Django 应用程序并对其进行测试。我收到错误:

Traceback (most recent call last):
  File "../support/tests.py", line 17, in foo
    self.assertEqual(response.status_code, HttpResponseForbidden.status_code)
AssertionError: 200 != 403

导致问题的测试本身的代码是:

response = self.client.get('/support/download/bar/')
self.assertEqual(response.status_code, HttpResponseForbidden.status_code)

我不明白诊断此问题的例程,从哪里着手。浏览网页寻找类似问题没有帮助。

网址/support/download/bar/似乎有问题?

【问题讨论】:

    标签: python django


    【解决方案1】:

    您在 tests.py 中进行的测试:

    self.assertEqual(response.status_code, HttpResponseForbidden.status_code)
    

    您正在检查访问 URL /support/download/bar/ 时的响应是否为 HttpResponseForbidden(代码 403)。

    显然,您的页面已成功显示(代码 200),这解释了您的错误:

    AssertionError: 200 != 403
    

    您预计会出现错误,但您已成功显示网页。

    【讨论】:

    • 是的,可能需要添加权限检查。
    • 感谢拉斐尔的回复。现在我明白了这个问题。
    • 您可能认为您确实期待403,然后您的views.py 可能错误地检查了某些访问权限。或者成功显示网页的目的,然后你必须适当地重写你的测试。
    • 是的,这是写错的观点之一。它应该为未经授权的用户返回 403。
    【解决方案2】:

    此测试似乎在您的应用程序中检测到错误(或者测试本身的预期错误)。当测试需要 403 时,您的应用程序返回 200 OK,我只能假设某种访问限制或安全措施不起作用。

    弄清楚这里发生了什么的第一步是找出为什么测试会出现 403。应该发生什么?检查源代码,尤其是中间件和装饰器(这是进行大量权限检查的地方)并检查测试代码是否设置正确。

    如果你真的不明白为什么测试会检查那个或者 403 错误代码是如何产生的,你将不得不根据你得到代码的地方做一些调查(假设你没有写它你自己)。询问编写它的人,或检查添加测试的 git 提交消息,或在 git 历史记录中向后移动直到找到测试工作的点,这些都是选项。

    【讨论】:

    • 感谢您的回复,安德鲁。请告诉我,您有什么建议可以解决问题吗?
    • 实际上应用程序返回 200 而测试期望返回 403
    • Downvote :没有通读整个问题并回答了与预期相反的问题。 编辑:在正确编辑您的答案后收回。
    • 没错。测试返回 200。
    • @h3d0 我将编辑一些关于如何排除故障的额外建议。
    猜你喜欢
    • 2016-01-21
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2018-05-19
    • 2014-09-27
    • 2014-03-26
    相关资源
    最近更新 更多