如何禁止py.test内部弃用警告


94

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

语境:我期待评估从移植测试套件的难度nosepytest。该套件相当大,并且大量使用基于nose样式yield的测试生成器。

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

仅仅在$ pytest path-to-test-folderpytest 3.0.4中运行完全由以下页面组成:

WC1 ~repos/numpy/numpy/lib/tests/test_twodim_base.py yield tests are deprecated, and scheduled to be removed in pytest 4.0

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

Answers:


85

来自pytest --help

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

4
正如帮助文本所说,这只会省略文本摘要。结果仍为黄色,并显示警告。
大卫·派森(DavidPärsson)'17年

最好放入pytest.ini文件,如下所示。
vy32

93

pytest -p no:warnings,或将以下内容添加到pytest.ini或tox.ini中:

[pytest]
addopts = -p no:warnings

结果将是绿色,没有任何警告迹象。请参阅https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary中的文档

对于想要干净输出的测试套件,这可能是有效的用例。

请注意,始终隐藏所有警告可能会导致您错过重要警告。如果您只想隐藏特定的警告,请查看Cloc的答案


2
addopts = -p no:warnings是一个非常糟糕的主意,CloC解决方案要好得多,但是当ignore::InsecureRequestWarning无法识别时,我不得不使用您的,因此您也将获得+1
Peter

永久禁用所有警告(即使用pytest.ini)几乎不是一个好主意。如CloC所述,仅禁用“弃用”警告(并按模块)是执行此操作的正确方法。
Neowizard

71

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

阅读有关警告捕获的 pytest文档:

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

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

似乎已pytest完全删除了过滤器,因为它会DeprecationWarning在运行时显示所有过滤器,并且Python的有关默认警告过滤器的文档明确指出:

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

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

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

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

编辑:从colini的评论,可以按模块筛选。忽略所有sqlalchemy的弃用警告的示例:

ignore::DeprecationWarning:sqlalchemy.*:

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

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

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

[pytest]
filterwarnings =
    ignore::DeprecationWarning

9
要过滤模块,请使用正则表达式。忽略来自所有ignore::DeprecationWarning:sqlalchemy.*:
sqlalchemy

@colini作为-W标志的参数对我来说失败了,但在pytest.ini文件中对我有用。
WhiteHotLoveTiger

6

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

[pytest]
addopts = -p no:warnings

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

-p否:警告

或者,如果您只想隐藏一些特定的不建议使用的警告,请在pytest.ini文件中添加以下语句

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

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

或尽管不推荐,但您可以使用

--disable-warnings

命令行选项,以完全禁止来自测试运行输出的警告摘要。


5

我不想隐藏所有警告,所以我把它放在 pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.