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’:’測試數(shù)據(jù)’})print (rep.content)# 測試http請(qǐng)求的返回碼是否正確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時(shí),就能正常返回200,是不是哪里的設(shè)置不對(duì)?
問題解答
回答1:看你的錯(cuò)誤是404,說明訪問/data/datamsg/的時(shí)候沒找到url,要看你的url地址是怎么配的,試試/data/datamsg把后面的/去掉,又或才是你要加上http://localhost之類的
回答2:你說你用瀏覽器可以瀏覽該 url你通過瀏覽器訪問 url,瀏覽器會(huì)發(fā)送 GET 請(qǐng)求但是你在測試?yán)锩嬗玫氖?POST 請(qǐng)求。
所以就算,瀏覽器里面正不正常和測試通不通過沒有任何聯(lián)系
回答3:出現(xiàn)404,應(yīng)該如1L所言,需要補(bǔ)全URL(host部分)。因?yàn)橥ㄟ^瀏覽器請(qǐng)求的時(shí)候,頁面里URL是 / 開頭,瀏覽器會(huì)自動(dòng)加上host;而你在單元測試用例里,必須自己寫完整的URL。出現(xiàn)302,你得看看:302跳轉(zhuǎn)到了哪個(gè)URL?是你在哪里增加了什么限制/驗(yàn)證條件?比如,增加了“l(fā)ogin_required”,如果系統(tǒng)檢查沒有登錄,自動(dòng)302跳轉(zhuǎn)到登錄頁?還有一種可能,應(yīng)該是出現(xiàn)403才對(duì),你偽造了POST請(qǐng)求,而django默認(rèn)是有csrf校驗(yàn)的。
