需要py.test从python日志记录模块记录断言错误到日志文件中
问题内容:
需要py.test从python日志记录模块记录断言错误到日志文件中。该测试已设置python日志记录模块,并且所有日志均按预期进行。我在整个测试中都使用了assert语句。但是,当遇到断言错误时,这些消息不会记录在python记录输出中,而是记录在命令控制台中。
有没有办法让py.test在测试的日志输出中记录断言错误?
现在这些错误在命令控制台中,但是如果这些断言错误也作为python日志记录输出的一部分记录下来,从而将所有日志消息都捕获到一个地方,那就太好了。另外,对于长时间运行的测试,直到整个测试完成,我才能看到错误,这可能要等待很长时间。如果我能立即看到断言错误,那就太好了,这样我可以决定采取行动了。
问题答案:
您可以通过使用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通常报告的异常长得多。这是因为日志记录不会将堆栈截断为仅仅是测试功能,您可以根据需要自己添加它。