warning - python logging範例




Django-測試失敗時記錄 (2)

我在Django有很多單元測試,如果測試失敗,我經常需要查看日誌(如果可能的話,在控制台中)。 我不能真正使用日誌文件,因為單元測試時會變得非常混亂。
我現在所做的是:settings.py中的主動控制台日誌記錄,只運行這個特定的測試。 我希望有一個更方便的方法來做到這一點。 我只想看看什麼是記錄失敗的測試,而不是完整的日誌。

編輯:事件雖然是一個awnser - 我已經接受了 - 我不太滿意。 我只想看到失敗測試的日誌輸出。 我正在尋找像PHPUnit提供的解決方案。 它捕獲完整的輸出(用於記錄+打印),並且只在測試失敗時才將其寫入標準輸出。


將根記錄器設置為僅在運行測試時使用控制台處理程序。 最容易檢測的方法是查看“test”是否是第二個argv參數。 確保所有感興趣的記錄器都有"propagate": True以便他們將日誌轉發到根記錄器。

# settings.py
import sys

if sys.argv[1] == 'test':
    LOGGING['root'] = {
        'handlers': ['console'],
        'level': 'DEBUG',
    }

那麼,我只是想出瞭如何解決這個問題。
顯然,有一個-b選項可以“緩衝輸出”,除非在運行單元測試時測試失敗。 如果您的tests.py文件執行unittest.main()那麼使用起來非常簡單。 只要鍵入python tests.py -b ,完整的輸出將被緩衝,除非測試失敗。

...........F
Stdout:
OK :)
OK :)

======================================================================
FAIL: testStr (__main__.MyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "tests.py", line 93, in testStr
    self.fail()
AssertionError: None

Stdout:
OK :)
OK :)

----------------------------------------------------------------------
Ran 12 tests in 0.005s

在這種情況下,每個測試都會打印一些東西,但只有最後一個(失敗的顯示)。 由於日誌也可以打印到控制台(請參閱@托馬斯的答案),您將只能看到相關的日誌。





console