2016-01-20 50 views
2

有沒有辦法直接在測試反饋中顯示StaticLiveServerTestCase期間服務器上發生的錯誤?也就是說,當某些服務器函數調用錯誤和頁面不顯示時,默認情況下的測試執行不知道服務器錯誤。有沒有辦法將該輸出傳遞到測試線程?在Django StaticLiveServerTestCase期間在測試輸出中顯示服務器錯誤?

最好這些錯誤會顯示在測試代碼執行中直接顯示錯誤的相同位置。如果這不是(容易)可能,那麼快速查看這些服務器錯誤的下一個最佳方法是什麼?

謝謝!

代碼(如需要):

class TestFunctionalVisitor(StaticLiveServerTestCase): 
    def setUp(self): 
     self.browser = webdriver.Firefox() 

    def tearDown(self): 
     self.browser.quit() 

    def test_visitor(self): 
     self.browser.get(self.live_server_url) 
     self.assertEqual(self.browser.title, "Something") 

... 

class Home(TemplateView): 
    template_name = 'home.html' 

    def get_context_data(self): 
     context = {} 
     MyModel = None 
     context['my_models'] = MyModel.objects.all() 
     return context 

這已經顯著改變,以使之成爲簡單短。但是,當MyModelNone並試圖呼叫objects.all()服務器有一個服務器500錯誤,但我得到的是從測試輸出的"Something" not in self.browser.title錯誤,當我想在測試輸出中看到NoneType has no...錯誤。

+0

你能請出示你的代碼? –

+0

@MedhatGayed:我添加了一個(刪節的)我的代碼示例。 –

+0

[我如何調試由DJango測試服務器提供的錯誤500's?](http://stackoverflow.com/questions/8159414/how-do-i-debug-error-500s-served-up-by -django-test-server) –

回答

-1

這正是爲什麼it is recommended有更多的單元測試比集成和UI /端到端。除了其他方面,後者不會爲您提供具體的反饋,而且您經常需要更多時間調試和調查UI測試失敗的原因。另一方面,當單元測試失敗時,通常是失敗或異常,指向代碼中的特定行 - 您馬上得到「出錯了」的答案。

換句話說,重點是:用單元測試覆蓋這個特定的問題讓你的UI測試保持原樣。


爲了幫助你收集有關"Something" not in self.browser.title失敗的詳細信息,上打開日誌和日誌儘可能多的細節儘可能。您也可以使用built-in Error Reporting,例如,讓Django向您發送500錯誤的電子郵件。換句話說,收集所有細節並手動排除故障。

+0

我打算做更多的單元測試。但我實際上正在嘗試TDD,因此我正在編寫功能測試,這會導致我接下來要寫的單元測試。所以這些單元測試將很快到位。但是,沒有一種特別好的方法可以讓這些單元測試輕鬆地顯示在輸出中,而無需手動查找其他地方? (如果這有什麼區別,我主要談論本地測試) –

+0

糟糕,也許我的IDE只是有點太「聰明」了。看起來我正在查找的錯誤已經顯示在控制檯輸出中,但是當點擊特定測試時,我只看到了測試客戶端部分的輸出。 –

+0

@JennyShoars很高興聽到您發現記錄的服務器端錯誤。您應該添加一些細節,作出回答並接受它。希望我的回答至少部分有用。謝謝。 – alecxe

2

立即看到錯誤,在調試模式下運行測試:

from django.test.utils import override_settings 

@override_settings(DEBUG=True) 
class DjkSampleTestCase(StaticLiveServerTestCase): 
    # fixtures = ['club_app_phase01_2017-01-09_13-30-19-169537.json'] 

    reset_sequences = True 

但是人們也應該配置服務器端錯誤的記錄,或者通過自定義django.core.handlers.base.BaseHandlerhandle_uncaught_exception()方法實現,或通過崗哨。

0

我用它來替代使用默認記錄:

import logging 
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s -%(filename)s:%(lineno)d - %(message)s') 

這將在終端上顯示標準錯誤。你甚至可以這樣做:

logging.debug('My var %s', var) 

,如果你想使用日誌記錄非調試事情,我會建議創建自定義記錄程序我只能這樣做了調試。

更多關於日誌記錄詳細信息:

相關問題