2012-08-07 98 views
24

我們最近已經切換到Python測試py.test(這是夢幻般的順便說一句)。不過,我試圖找出如何控制日誌輸出(即內置的python日誌記錄模塊)。我們已經安裝pytest-capturelog,並且按預期工作,當我們想要查看日誌時,我們可以通過--nologcapture選項。但是,如何控制日誌記錄級別(例如,信息,調試等)並過濾日誌記錄(如果您只對特定模塊感興趣)。是否有現成的py.test插件來實現這一目標?還是我們需要推出自己的插件?py.test日誌控制

感謝, 強尼

+0

pytest-capturelog似乎已被替換爲https://pypi.python.org/pypi/pytest-catchlog/ 這是在下面的一些評論中提到的, pytest-capturelog。我要離開這個評論,希望它能更明顯地看到,並讓下一個人不要犯我的錯誤。 – cledoux 2017-06-06 20:54:26

回答

9

安裝和使用pytest-capturelog plugin能夠滿足你的大部分pytest /記錄需求。如果缺少某些東西,你應該能夠相對容易地實現它。

+0

我剛剛用pytest 3.0.6試了一下。它工作正常,但吠聲很多:/pytest_capturelog.py:171'pytest_runtest_makereport'鉤子使用棄用的__multicall__參數 WC1無pytest_funcarg__caplog:使用「pytest_funcarg__」前綴聲明fixtures不推薦使用,並安排在pytest 4.0中刪除。請刪除前綴,然後使用@ pytest.fixture修飾器。 ... – mark 2017-02-17 08:57:44

+1

看起來像是有一個解決此問題的分支:https://pypi.python.org/pypi/pytest-catchlog/ – 2017-03-03 10:40:08

8

正如霍爾格說,你可以使用pytest-capturelog

def test_foo(caplog): 
    caplog.setLevel(logging.INFO) 
    pass 

如果你不想使用pytest-capturelog你可以在你的日誌記錄配置使用標準輸出StreamHandler所以pytest將捕獲的日誌輸出。下面是一個例子basicConfig

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) 
+3

pytest-capturelog似乎沒有維護並引發警告。看起來有一個解決此問題的分支:https://pypi.python.org/pypi/pytest-catchlog/ – 2017-03-03 10:40:22

7

後期貢獻了一點,但我可以推薦pytest-logging一個簡單的下拉式測井採集解決方案。 pip install pytest-logging後,您可以

$ py.test -s -v tests/your_test.py 
$ py.test -s -vv tests/your_test.py 
$ py.test -s -vvvv tests/your_test.py 

等控制你的日誌(屏幕上顯示)的詳細程度...... NB - 在-s標誌是很重要的,沒有它py.test將過濾掉所有sys.stderr信息。

1

有點後來的貢獻:你可以試試pytest-logger。這個插件的新奇之處在於記錄到文件系統:pytest爲每個測試項目提供了nodeid,它可以用來組織測試會話日誌目錄(在pytest tmpdir工具的幫助下以及它的測試用例開始/結束鉤子)。

您可以分別爲終端和文件系統配置多個處理程序(包括級別),並提供自己的cmdline選項以過濾記錄器/級別以使其適用於您的特定測試環境。默認情況下,您可以將所有文件系統和小部分日誌記錄到終端,如果需要,可以根據每個會話更改--log選項。如果用戶沒有定義鉤子,插件默認不做任何事情。