2012-09-22 35 views
1

需要py.test來記錄來自python日誌記錄模塊的日誌文件中的斷言錯誤。 該測試已設置python日誌記錄模塊,並且所有日誌均按預期進行。 我在整個測試中使用了assert語句。但是當遇到斷言錯誤時,這些消息不會記錄在python日誌輸出中,而是記錄在命令控制檯中。需要py.test來記錄來自python日誌文件的斷言錯誤

有沒有辦法讓py.test登錄測試的日誌輸出的斷言錯誤?

眼下的錯誤是在命令控制檯,但是這將是巨大的,如果這樣所有的日誌消息在一個地方拍攝的這些斷言錯誤也記錄爲蟒蛇日誌輸出的一部分。另外,對於長時間運行測試,在整個測試結束之前我都看不到錯誤,這可能需要等待很長時間。如果我能立即看到斷言錯誤,那麼我可以決定採取行動,這將是非常好的。

回答

3

您可以通過在conftest.py文件中使用pytest_runtest_call掛接來實現:

import logging 

def pytest_runtest_call(__multicall__): 
    try: 
     __multicall__.execute() 
    except KeyboardInterrupt: 
     raise 
    except: 
     logging.exception('pytest_runtest_call caught exception:') 
     raise 

的pytest_runtest_call掛鉤負責實際運行測試的功能,但不負責捕捉異常和報告他們。這意味着它是捕獲異常並將其交給記錄的理想場所。

實際上並未改變測試函數被調用這種方式使用__multicall__只需撥打假若此掛鉤是不存在被稱爲鉤。

注意,由掛鉤記錄的異常將是更長的時間,則例外,這將由py.test正常報道。這是因爲日誌記錄不會將堆棧截斷爲測試函數,如果需要,可以自己添加它。