您可以通过使用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通常报告的异常长得多。这是因为日志记录不会将堆栈截断为仅仅是测试功能,您可以根据需要自己添加它。