您的位置:首页技术文章
文章详情页

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

【字号: 日期:2022-06-30 16:58:56浏览:55作者:猪猪

问题描述

测试代码如下:

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校验的。

标签: Python 编程