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.017sFAILED (failures=1)Destroying test database for alias ’default’...
但是在用浏览器浏览该url时,就能正常返回200,是不是哪里的设置不对?
问题解答
回答1:看你的错误是404,说明访问/data/datamsg/的时候没找到url,要看你的url地址是怎么配的,试试/data/datamsg把后面的/去掉,又或才是你要加上http://localhost之类的
回答2:你说你用浏览器可以浏览该 url你通过浏览器访问 url,浏览器会发送 GET 请求但是你在测试里面用的是 POST 请求。
所以就算,浏览器里面正不正常和测试通不通过没有任何联系
回答3:出现404,应该如1L所言,需要补全URL(host部分)。因为通过浏览器请求的时候,页面里URL是 / 开头,浏览器会自动加上host;而你在单元测试用例里,必须自己写完整的URL。出现302,你得看看:302跳转到了哪个URL?是你在哪里增加了什么限制/验证条件?比如,增加了“login_required”,如果系统检查没有登录,自动302跳转到登录页?还有一种可能,应该是出现403才对,你伪造了POST请求,而django默认是有csrf校验的。
