更新:我已经向 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 调试过程中显示打印输出,请按照以下步骤操作:
1)在您的项目中创建一个
pytest.ini
并添加此
[pytest]
log_cli = true
-s --capture=no --log-cli-level=10
这对我有用!
我不确定早期版本,但这就是我在 Pycharm 2023.3 专业版中解决它的方法(他们也应该在社区版中拥有它)
cmd + ,
)Advanced Settings
Pytest: don't add "--no-header --no-summary -q
复选框并单击 OK
就是这样。这应该在运行测试时将所有打印语句记录到标准输出。
来源:链接