2015-11-07 93 views
0

我正在爲我的Django應用程序編寫測試用例,但我使用Python中的請求包來訪問狀態碼,然後使用assert語句。這個測試用例僅適用於員工人數:如何在Django中使用請求庫獲取狀態碼

class StaffClientServerTestCase(TestCase): 

    def test_login_staff(self): 
     User.objects.create_superuser('abc', '[email protected]', '1234') 
     self.client.login(username='abc', password='1234') 
     self.client.get('/dashboard/') 
     s = requests.get('http://localhost:8000/dashboard/') 
     print s.status_code 
     self.assertEqual(200, s.status_code) 

只有員工的用戶才能訪問到儀表板,所以我創建了一個工作人員的用戶對象。以下行

self.client.login(username='abc', password='1234')即將成爲事實。 self.client.get('/dashboard/')如果我打印出此行,它會顯示頁面的html內容,這意味着我的工作人員用戶可以訪問dashboard

但是當我使用請求模塊查看dashboard url的狀態代碼時,它顯示status code = 500,而且我的測試失敗了。

s = requests.get('http://localhost:8000/dashboard/') print s.status_code

誰能告訴我在哪裏,我錯了嗎?爲什麼我的狀態碼出來的時候是500,即使工作人員用戶可以訪問儀表板並使用print self.client.get('/dashboard/')打印出其內容。幫幫我!

+1

您應該在'requests.get'中指定auth憑證,或者在測試中不使用'requests.get',並測試'self.client',因爲您使用'self.client'方法登錄並且' requests.get'是另一回事,所以使用'self.client'登錄並不意味着你將會被其他庫(比如'requests')進行認證。仔細想想你應該做什麼測試和測試。此外,如果您只是未通過身份驗證,則HTTP 500不是正確的狀態碼,因此您應該修復儀表板。 – dopstar

+0

任何想法如何獲得狀態代碼?我需要通過狀態碼進行測試。 – python

+0

我禁用了我的管理頁面,這就是爲什麼我得到的狀態代碼爲500. – python

回答

1

您可以測試其他辦法的情況下:

保護您的觀點與裝飾:

@user_passes_test(lambda u: u.is_staff) 
def dashboard(request, ...): 
    # ... 

,然後用requests要求,看看是否被禁止看到的網頁。如果你被禁止(403禁止),那麼你的觀點正常工作。爲了驗證你的視圖是否能夠爲員工用戶正確地工作,請移除裝飾器並再次請求,如果你經過這次,那麼一切都很好,唯一要測試的就是視圖內部的邏輯。

但是現在,你得到500而不是403,這意味着你有後端錯誤。首先修復它們

+0

我禁用了我的管理頁面,這就是爲什麼我得到500錯誤。否則一切都很好 – python

相關問題