在使用 pytest 集成的 PyCharm 中,可以抑制通过测试的 print() 输出吗?

问题描述 投票:0回答:2

更新:我已经向 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 可能没有帮助。 从 PYCHARM 运行时使 PYTEST 更安静

我正在使用 Ubuntu 20.04.2、PyCharm 2021.1.2(社区)、Python 3.9.2、pytest-6.2.4、conda 4.10.1

pycharm pytest
2个回答
4
投票

为了在 pycharm 调试过程中显示打印输出,请按照以下步骤操作:

1)在您的项目中创建一个

pytest.ini
并添加此

[pytest]
log_cli = true
  1. 在调试设置中(在 IDE 中单击运行左侧的编辑设置),在附加参数中添加
-s  --capture=no --log-cli-level=10 

这对我有用!

来源https://youtrack.jetbrains.com/issue/PY-48743


0
投票

Pycharm 2023.3 已解决

我不确定早期版本,但这就是我在 Pycharm 2023.3 专业版中解决它的方法(他们也应该在社区版中拥有它)

  1. 转到“设置”(MacOS 中为
    cmd + ,
  2. 从左侧导航窗格转到
    Advanced Settings
  3. 在搜索栏中输入“Pytest”
  4. 选中
    Pytest: don't add "--no-header --no-summary -q
    复选框并单击
    OK

就是这样。这应该在运行测试时将所有打印语句记录到标准输出。
来源:链接

© www.soinside.com 2019 - 2024. All rights reserved.