需要py.test在python日志记录模块中记录日志文件中的断言错误

时间:2012-09-22 01:16:19

标签: python assert pytest

需要py.test在python日志记录模块中记录日志文件中的断言错误。 该测试设置了python日志记录模块,所有日志都按预期进行。 我在整个测试过程中使用了断言语句。但是遇到断言错误时, 这些消息不会记录在python日志记录输出中,而是记录在命令控制台中。

有没有办法让py.test在测试的日志记录输出中记录断言错误?

现在错误发生在命令控制台中,但如果这些断言错误也作为python日志记录输出的一部分记录下来会很好,所以所有日志消息都在一个地方捕获。此外,对于长时间运行的测试,我无法看到错误,直到整个测试完成,这可能需要很长时间才能完成。如果我能立即看到断言错误,那么我可能会决定采取行动。

1 个答案:

答案 0 :(得分: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通常报告的异常长得多。这是因为日志记录不会将堆栈截断为测试函数,如果需要,可以自己添加。