pycharm - 在使用 pytest 集成的 PyCharm 中,是否可以针对通过的测试抑制 print() 输出?

标签 pycharm pytest

更新:我已经向 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 
    

    这对我有用!!!

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

    关于pycharm - 在使用 pytest 集成的 PyCharm 中,是否可以针对通过的测试抑制 print() 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68290858/

    相关文章:

    python - PyCharm 中我的项目旁边的复选标记图标是什么?

    python - 雪花 Python Okta 连接

    python - pytest 找不到模块

    python - 由于 AttributeError PyTest-Mock 不工作

    python - 如何在pytest中抑制第三方日志

    python - Django:pycharm:未版本化的文件

    python - 如何从给定范围内生成在每次执行中产生相同输出的固定随机数

    python - 什么时候在 pytest 中使用 fixture 而不是仅仅声明一个变量

    python - subprocess.call() 中的 Pytest 模拟全局变量