首页  >  问答  >  正文

python - Django 测试url老是返回404,用浏览器浏览url就正常,这是怎么回事?

测试代码如下:

from django.test import TestCase
# Create your tests here.

class SendviewsTestCase(TestCase):

    def test_get_data(self):
        rep = self.client.post('/data/datamsg/',{'data_name':'测试数据'})
        print (rep.content)
        # 测试http请求的返回码是否正确
        self.assertEqual(rep.status_code,200)
======================================================================
FAIL: test_get_data (dataforpro.tests.SendviewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/yangtz/developproject/backend/dataforpro/tests.py", line 20, in test_get_data
    self.assertEqual(rep.status_code,200)
AssertionError: 404 != 200

----------------------------------------------------------------------
Ran 1 test in 0.017s

FAILED (failures=1)
Destroying test database for alias 'default'...

但是在用浏览器浏览该url时,就能正常返回200,是不是哪里的设置不对?

淡淡烟草味淡淡烟草味2711 天前624

全部回复(3)我来回复

  • 怪我咯

    怪我咯2017-05-18 11:03:59

    看你的错误是404,说明访问/data/datamsg/的时候没找到url,要看你的url地址是怎么配的,试试/data/datamsg把后面的/去掉,又或才是你要加上http://localhost之类的

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-18 11:03:59

    你说你用浏览器可以浏览该 url
    你通过浏览器访问 url,浏览器会发送 GET 请求
    但是你在测试里面用的是 POST 请求。

    所以就算,浏览器里面正不正常和测试通不通过没有任何联系

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-18 11:03:59

    出现404,应该如1L所言,需要补全URL(host部分)。因为通过浏览器请求的时候,页面里URL是 / 开头,浏览器会自动加上host;而你在单元测试用例里,必须自己写完整的URL。
    出现302,你得看看:302跳转到了哪个URL?是你在哪里增加了什么限制/验证条件?比如,增加了“login_required”,如果系统检查没有登录,自动302跳转到登录页?
    还有一种可能,应该是出现403才对,你伪造了POST请求,而django默认是有csrf校验的。

    回复
    0
  • 取消回复