有没有办法抑制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
有没有办法关闭这些警告?
答案 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 option和warnings.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