我們最近已經切換到Python測試py.test(這是夢幻般的順便說一句)。不過,我試圖找出如何控制日誌輸出(即內置的python日誌記錄模塊)。我們已經安裝pytest-capturelog,並且按預期工作,當我們想要查看日誌時,我們可以通過--nologcapture選項。但是,如何控制日誌記錄級別(例如,信息,調試等)並過濾日誌記錄(如果您只對特定模塊感興趣)。是否有現成的py.test插件來實現這一目標?還是我們需要推出自己的插件?py.test日誌控制
感謝, 強尼
我們最近已經切換到Python測試py.test(這是夢幻般的順便說一句)。不過,我試圖找出如何控制日誌輸出(即內置的python日誌記錄模塊)。我們已經安裝pytest-capturelog,並且按預期工作,當我們想要查看日誌時,我們可以通過--nologcapture選項。但是,如何控制日誌記錄級別(例如,信息,調試等)並過濾日誌記錄(如果您只對特定模塊感興趣)。是否有現成的py.test插件來實現這一目標?還是我們需要推出自己的插件?py.test日誌控制
感謝, 強尼
安裝和使用pytest-capturelog plugin能夠滿足你的大部分pytest /記錄需求。如果缺少某些東西,你應該能夠相對容易地實現它。
我剛剛用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
看起來像是有一個解決此問題的分支:https://pypi.python.org/pypi/pytest-catchlog/ – 2017-03-03 10:40:08
正如霍爾格說,你可以使用pytest-capturelog:
def test_foo(caplog):
caplog.setLevel(logging.INFO)
pass
如果你不想使用pytest-capturelog你可以在你的日誌記錄配置使用標準輸出StreamHandler所以pytest將捕獲的日誌輸出。下面是一個例子basicConfig
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
pytest-capturelog似乎沒有維護並引發警告。看起來有一個解決此問題的分支:https://pypi.python.org/pypi/pytest-catchlog/ – 2017-03-03 10:40:22
後期貢獻了一點,但我可以推薦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
信息。
有點後來的貢獻:你可以試試pytest-logger。這個插件的新奇之處在於記錄到文件系統:pytest爲每個測試項目提供了nodeid,它可以用來組織測試會話日誌目錄(在pytest tmpdir工具的幫助下以及它的測試用例開始/結束鉤子)。
您可以分別爲終端和文件系統配置多個處理程序(包括級別),並提供自己的cmdline選項以過濾記錄器/級別以使其適用於您的特定測試環境。默認情況下,您可以將所有文件系統和小部分日誌記錄到終端,如果需要,可以根據每個會話更改--log
選項。如果用戶沒有定義鉤子,插件默認不做任何事情。
pytest-capturelog似乎已被替換爲https://pypi.python.org/pypi/pytest-catchlog/ 這是在下面的一些評論中提到的, pytest-capturelog。我要離開這個評論,希望它能更明顯地看到,並讓下一個人不要犯我的錯誤。 – cledoux 2017-06-06 20:54:26