python - Django 測試url老是回404,用瀏覽器瀏覽url就正常,這是怎麼回事?
淡淡烟草味
淡淡烟草味 2017-05-18 11:01:59
0
3
632

測試程式碼如下:

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,是不是哪裡的設定不對?

淡淡烟草味
淡淡烟草味

全部回覆(3)
刘奇

看你的錯誤是404,表示訪問/data/datamsg/的時候沒找到url,要看你的url地址是怎麼配的,試試/data/datamsg把後面的/去掉,又或才是你要加上http://localhost之類的

曾经蜡笔没有小新

你說你用瀏覽器可以瀏覽該 url
你透過瀏覽器存取 url,瀏覽器會發送 GET 請求
但是你在測試裡面用的是 POST 請求。

所以就算,瀏覽器裡面正不正常和測試通不通過沒有任何聯繫

曾经蜡笔没有小新

出現404,應該如1L所言,需要補全URL(host部分)。因為透過瀏覽器請求的時候,頁面裡URL是 / 開頭,瀏覽器會自動加上host;而你在單元測試案例裡,必須自己寫完整的URL。
出現302,你得看看:302跳到哪個URL了?是你在哪裡增加了什麼限制/驗證條件?例如,增加了“login_required”,如果系統檢查沒有登錄,自動302跳到登入頁面?
還有一種可能,應該是出現403才對,你偽造了POST請求,而django預設是有csrf校驗的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!