需要py.test登录断言从Python记录模块中的日志文件中的错误(Need py.test to

2019-09-22 18:14发布

需要py.test登录断言从Python记录模块中的日志文件中的错误。 该测试已Python记录模块设置和所有记录去那里预期。 我通过使用断言语句进行测试。 但是,当遇到的断言错误,这些消息不会在Python的日志输出,但在命令控制台登录。

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

眼下的错误是在命令控制台,但是这将是巨大的,如果这样所有的日志消息在一个地方拍摄的这些断言错误也记录为蟒蛇日志输出的一部分。 此外,对于长时间运行测试,我看不到错误,直到整个测试结束这可能是一个漫长的时间等待。 这将是巨大的,如果我可以马上看到断言错误,所以我可能会决定采取行动。

Answer 1:

您可以通过在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正常报道。 这是因为记录不会截断堆栈只是测试功能,你可以在需要它添加这个自己。



文章来源: Need py.test to log assert errors in log file from python logging module