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