pytest: 如何在被测试函数中显示 logging.debug 的消息
pytest是一个功能强大的Python测试框架,它可以用于执行单元测试、集成测试和功能测试。在使用pytest进行测试时,有时我们希望能够看到来自被测试函数中的logging.debug()语句的输出信息。本文将介绍出现这个问题的原因以及解决方法。
问题的原因是pytest默认情况下不会显示来自被测试函数中的logging.debug()语句的输出信息。这是因为pytest的日志系统默认将日志级别设置为WARNING,而logging.debug()语句的日志级别为DEBUG。因此,pytest会忽略这些DEBUG级别的日志消息。
解决这个问题的方法是通过在命令行中使用一些参数来改变pytest的日志配置。具体来说,我们可以使用"--log-cli-level"参数来设置日志级别为DEBUG,并使用"--log-cli=true"参数来打开日志输出。这样,当执行pytest命令时,我们将能够看到来自被测试函数中的logging.debug()语句的输出信息。
下面是使用命令行解决这个问题的示例命令:
pytest -o log_cli=true --log-cli-level=10 func.py
在上面的示例命令中,"-o"参数用于设置pytest的配置项。"log_cli=true"表示打开日志输出,"--log-cli-level=10"表示将日志级别设置为DEBUG。func.py是我们要测试的函数所在的文件。
通过以上的命令,我们将能够在执行pytest时看到来自被测试函数中的logging.debug()语句的输出信息,这对于调试和定位问题非常有帮助。
总结起来,当我们希望在使用pytest进行测试时能够看到来自被测试函数中的logging.debug()语句的输出信息时,可以通过在命令行中使用"--log-cli-level"和"--log-cli=true"参数来改变pytest的日志配置。这样,我们将能够方便地调试和定位问题。
pytest中如何显示来自被测试函数中的logging.debug消息
在PyTest运行期间,我发现了这个线程,当我想要展开PyTest运行中的"warning summary"部分时。通过调整环境变量PYTHONWARNINGS
可以帮助解决这个问题。具体可参考https://docs.python.org/3/using/cmdline.html#envvar-PYTHONWARNINGS。
如果执行export PYTHONWARNINGS=error
,你将看到警告的完整堆栈跟踪信息。然而,如果你正在运行一个测试套件,运行将会停止。
问题出现的原因:
在PyTest运行期间,当使用logging.debug记录调试消息时,默认情况下这些消息不会显示出来。然而,在调试过程中,有时我们希望能够查看这些消息以便更好地理解测试的执行过程。
解决方法:
要显示来自被测试函数中的logging.debug消息,可以通过以下步骤实现:
1. 使用环境变量PYTHONWARNINGS来控制警告消息的显示。具体来说,可以将PYTHONWARNINGS设置为"error",以便将警告作为错误处理并显示完整的堆栈跟踪信息。
2. 在命令行中执行以下命令,将PYTHONWARNINGS设置为"error":
export PYTHONWARNINGS=error
这样设置后,当运行PyTest时,将会显示来自被测试函数中的logging.debug消息,以及完整的堆栈跟踪信息。
需要注意的是,如果你正在运行一个测试套件,运行将会停止。因此,这种方法更适用于单个测试运行的情况。
问题的出现原因是想要在被测试的函数中显示logging.debug的消息,但是默认情况下pytest不会显示这些消息。解决方法是通过设置pytest.ini或使用命令行参数来启用日志显示。
首先,我们可以在pytest.ini文件中添加以下内容来设置pytest默认显示日志消息:
[pytest]
log_cli = true
log_cli_level = DEBUG
注意:如果使用的是很旧的pytest版本(3.5之前),则需要在pytest.ini中设置log_cli = true才能使用下面的命令。
对于3.5及更高版本的pytest,可以在命令行中使用以下命令来临时启用日志显示:
pytest --log-cli-level=10 func.py
或者更明确地指定日志级别为DEBUG:
pytest --log-cli-level=DEBUG func.py
需要注意的是,命令行参数始终会覆盖pytest.ini中的设置。
如果没有使用pytest.ini文件,也可以直接使用命令行参数来启用日志显示。
在日志级别方面,可以参考Python官方文档(https://docs.python.org/3/library/logging.html#levels)中提供的日志级别列表。建议使用级别名称而不是数字代码,例如:
pytest --log-cli-level=WARNING func.py
此外,还可以在pytest.ini文件中使用'log_cli_level'来设置日志级别,而不是通过命令行参数。在pytest.ini中确保使用'log_cli_level'而不是'log-cli-level',也可以使用'DEBUG'代替'10'。
总结起来,要在pytest中显示被测试函数中的logging.debug消息,可以通过设置pytest.ini文件或使用命令行参数来启用日志显示。通过在pytest.ini中设置'log_cli_level'或使用命令行参数'--log-cli-level'来指定日志级别。命令行参数将覆盖pytest.ini中的设置。推荐使用日志级别名称而不是数字代码。