debugging pytest:如何在被测函数中显示logging.debug的消息

a0zr77ik  于 2022-11-14  发布在  其他
关注(0)|答案(3)|浏览(129)
''' func.py '''
import logging

def func():
    ''' func '''
    logging.basicConfig(
        format="\t %(filename)s"
        " %(funcName)s"
        "-ln%(lineno)d"
        " %(levelname)s \n%(message)s",
        level=logging.DEBUG,
        # stream=sys.stdout,
    )
    logger = logging.getLogger()
    logger.info(" >>> logger func info")
    logger.warning(" >>> logger func warning")
    print(" >>> print func info")

def test_func():
    ''' test func '''
    # caplog.set_level(logging.DEBUG)
    func()

if __name__ == "__main__":
    test_func()

假设我将上面的代码保存为func.py。

pytest -s func.py

我得到

" >>> print func info".

我如何才能获得

" >>> logger func info"


“〉〉〉记录器功能警告”
当我跑步时

pytest -s func.py

我希望我可以这样做,原因如下。我通常会在我的代码中插入logging.debug/info等。有时候,我想在运行pytest时看到logging.debug/info发出的消息。我在网上搜索了很长时间,但没有找到方法。提前感谢你的帮助。

nszi6y05

nszi6y051#

要在每次运行时默认执行此操作,请在pytest.ini中添加:

[pytest]
log_cli = true
log_cli_level = DEBUG

注意:如果使用非常旧的pytest,3.5之前的版本,您需要在pytest.ini中设置log_cli = true以使用以下命令。
否则,对于3.5及更高版本,您可以根据具体情况只使用命令行:

pytest --log-cli-level=10 func.py

或者说得更清楚些:

pytest --log-cli-level=DEBUG func.py

命令行将始终覆盖pytest.ini设置。

omhiaaxx

omhiaaxx2#

您也可以只使用命令行来执行此操作(无需创建pytest.ini):

pytest -o log_cli=true --log-cli-level=10 func.py
h7wcgrx3

h7wcgrx33#

当我想知道如何扩展PyTest运行中的“warning summary”部分时,我发现了这个线程。使用环境变量PYTHONWARNINGS可以帮助解决这个问题https://docs.python.org/3/using/cmdline.html#envvar-PYTHONWARNINGS。如果您使用export PYTHONWARNINGS=error,您将看到警告的完整堆栈跟踪。但是,如果您正在运行测试套件,运行将停止。

相关问题