如何抑制py.test内部弃用警告

时间:2016-11-20 22:21:17

标签: python pytest

有没有办法抑制pytest的内部弃用警告?

背景信息:我正在考虑评估将测试套件从nose移植到pytest的难度。该套件相当大,并且大量使用基于nose - 样式yield的测试生成器。

我想首先确保现有的测试通过pytest传递,然后将测试生成器更改为parameterized

使用pytest 3.0.4运行$ pytest path-to-test-folder完全由

的页面和页面控制
WC1 ~repos/numpy/numpy/lib/tests/test_twodim_base.py yield tests are deprecated, and scheduled to be removed in pytest 4.0

有没有办法关闭这些警告?

5 个答案:

答案 0 :(得分:52)

[pytest] addopts = -p no:warnings

或将以下内容添加到pytest.ini或tox.ini:

jar xf youWarFile.war

结果为绿色,没有任何警告指示(除非测试失败)。

请参阅https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary

答案 1 :(得分:41)

来自pytest --help

--disable-pytest-warnings
                      disable warnings summary, overrides -r w flag

答案 2 :(得分:26)

我认为您不想隐藏所有警告,而只是隐藏不相关的警告。在这种情况下,还会从导入的python模块中删除警告。

已阅读有关Warnings Capture的pytest文档:

  

-W命令行选项和filterwarnings ini选项均基于Python自己的-W optionwarnings.simplefilter,因此,请参阅Python文档中的这些部分,以获取其他示例和高级用法。

因此,您可以使用python的-W选项过滤警告!

pytest似乎完全删除了过滤器,因为它在运行时会显示所有DeprecationWarning,而Python的Default Warning Filters文档明确指出:

  

在常规版本中,默认警告过滤器具有   以下条目(按优先顺序):

default::DeprecationWarning:__main__
ignore::DeprecationWarning
ignore::PendingDeprecationWarning
ignore::ImportWarning
ignore::ResourceWarning

因此,在您的情况下,如果要让说说过滤要忽略的警告类型,例如DeprecationWarning,只需运行带有-W选项的pytest命令:

$ pytest path-to-test-folder -W ignore::DeprecationWarning

编辑:根据colini的注释,可以按模块进行过滤。忽略来自所有sqlalchemy的弃用警告的示例:

ignore::DeprecationWarning:sqlalchemy.*:

然后,您可以列出已安装的模块,这些模块会在pytest的输出中产生过多的噪声

与文件一起使用,而不是在命令行中使用:

您可能希望在pytest.ini文件中列出这些过滤器:

[pytest]
filterwarnings =
    ignore::DeprecationWarning

答案 3 :(得分:11)

您可以在pytest.ini文件中添加:

[pytest]
addopts = -p no:warnings

OR 在命令行的行下方传递。如果您的测试套件使用外部系统处理警告,这可能会很有用。

-p no:警告

,如果您只想隐藏一些不推荐使用的警告,请在pytest.ini文件中添加以下语句

[pytest]
filterwarnings =
    ignore:.*U.*mode is deprecated:DeprecationWarning

这将忽略所有DeprecationWarning类型的警告,其中消息的开头与正则表达式“。* U. * mode已弃用”。

或,尽管不建议这样做,但您可以使用

-disable-warnings

命令行选项可完全从测试运行输出中消除警告摘要。

答案 4 :(得分:0)

我不想隐藏所有警告,因此将其放在pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning