【问题标题】:Change logging level during testing execution在测试执行期间更改日志记录级别
【发布时间】:2018-01-17 22:38:48
【问题描述】:

我有一个应用程序,我在其中引入了标准日志记录库,我只是将其设置为 WARNING。

在运行单元测试时,我想避免出现这些错误和警告(只是因为我是故意制造它们!),但我想避免单元测试的冗长。

有什么方法可以让标准应用程序具有日志记录级别 (WARNING) 并在测试期间使用不同的级别(无或严重?)

例如,我希望我的应用程序在正常操作模式下显示以下内容:

=====
Application started
ERROR = input file is wrong
=====

但是,在运行我的单元测试时,我不希望出现任何这些输出,因为我实际上会使应用程序无法检查正确的错误跟踪,因此显示错误消息将是多余的,实际上会使检测复杂化问题。

查看 stackoverflow 我发现了一些类似的问题,但没有解决我的问题:

  • 问题在于打印,而不是日志记录

Is there a way to suppress printing that is done within a unit test?

  • 仅消除部分测试冗长

Turn some print off in python unittest

有什么想法/帮助吗?

【问题讨论】:

  • 我不确定你想要完成什么。您说要在测试期间关闭它们,但是您想在测试期间将它们打开,但是您对日志记录不感兴趣,您真正想要的是打印语句?尝试并描述您所拥有的确切行为,以及您希望这种行为是什么。
  • @PaulBecotte 感谢您对我的问题感兴趣。本质上,我希望在测试和正常的应用程序操作中具有不同的行为。我将举一些例子使其更明确

标签: python logging python-unittest


【解决方案1】:

我仍然不能 100% 确定 - 我认为您想要的是在您的应用中包含在测试期间被抑制的日志语句。

我会为此使用Nosetests - 它会抑制所有标准输出以通过测试并为失败的测试打印它,在我看来,这对于您的用例来说几乎是完美的。

一个不太好的解决方案,以防我不理解你,是定义一个测试用例类,你的所有测试都继承自它 - 它可以有额外的测试方法或其他任何东西(它应该继承自 unittest.TestCase 本身)。关键是您可以在该文件中将日志级别更改为更高/更低的级别,该文件仅在测试期间导入,这将允许您在测试期间具有特殊的日志记录行为。

nose 的行为虽然是最好的——它仍然会在失败的测试中显示输出并捕获打印语句。

【讨论】:

  • 嗯......你真的明白了。更改我用来鼻子的 unittest 标准模块让我有一些时间去做......所以我交叉检查了所有内容并且工作得很好!正是我想要的,谢谢!刚刚在文档中看到的一个快速问题是,鼻子正在维护中,预计不会有进一步的开发。你推荐nose2吗?
  • 不,从阅读中我看到我没有看到升级的任何价值。已经使用它大约 3 年了 - 也许有一天会有升级的理由,但它似乎对我们很有用。
猜你喜欢
  • 1970-01-01
  • 2016-03-09
  • 2014-09-01
  • 2023-04-11
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
相关资源
最近更新 更多