更新:我已经向 JetBrains 提出了这个问题。他们回应称它不可配置,只是一个可用性问题,而不是 PyCharm 中的错误。我对他们的回应提出了质疑。下面链接的文档说“默认捕获 stdout/stderr 输出的一个主要好处是,您可以使用 print 语句进行调试,运行此模块将准确地显示失败函数的输出并隐藏另一个函数。”对我来说,这清楚地表明下面的行为是一个错误。
原文:我正在尝试为 Python 中的单元测试确定一个良好的工作流程。我使用 PyCharm,pytest 似乎比 unittest 更流行且更简洁。我现有的手动测试使用 print() 进行调试,这似乎很有用且受支持。 https://docs.pytest.org/en/6.2.x/capture.html#using-print-statements-for-debugging
def test_func1():
print("debug output from test 1")
assert True
def test_func2():
print("debug output from test 2")
assert False
当我在 Pycharm 中运行此代码并选择 pytest 作为“默认测试运行程序”时,我得到:
simple_test.py::test_func1 PASSED [ 50%]debug output from test 1
simple_test.py::test_func2 FAILED [100%]debug output from test 2
问题:出现了通过测试的打印语句(而且没有换行符)。
当我使用默认设置从终端运行 pytest 时,我只得到:
debug output from test 2
我相信这就是 pytest 应该如何工作的,当我有大量测试时,这将变得至关重要。
我喜欢 Pycharm 中的集成测试 UI,尤其是树形结构以及它如何显示每个测试正在运行,但这对于大型项目来说感觉像是一个交易破坏者?有没有办法让它按应有的方式工作(仅显示失败测试的打印输出)?
我尝试在运行配置中传递“附加参数”,例如 -s 但在我看来,PyCharm(可能使用 TeamCity 插件)正在生成输出,而不是直接来自 pytest,因此将参数传递给 pytest 可能不会帮助。 Making PYTEST quieter when run from PYCHARM
我使用的是 Ubuntu 20.04.2、PyCharm 2021.1.2(社区)、Python 3.9.2、pytest-6.2.4、conda 4.10.1
最佳答案
为了在 pycharm 调试过程中显示打印输出,请按照下列步骤操作:
1)在您的项目中创建一个pytest.ini
并添加它
[pytest]
log_cli = true
- 在调试设置中(在 IDE 中单击“运行”左侧的“编辑设置”),在其他参数中添加
-s --capture=no --log-cli-level=10
这对我有用!!!
关于pycharm - 在使用 pytest 集成的 PyCharm 中,是否可以针对通过的测试抑制 print() 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68290858/