web-dev-qa-db-ja.com

py.testの内部廃止の警告を抑制する方法

Pytestの内部廃止警告を抑制する方法はありますか?

コンテキスト:テストスイートをnoseからpytestに移植する難しさを評価したいと考えています。スイートはかなり大きく、nose- style yieldベースのテストジェネレーターを頻繁に使用します。

最初にexistingテストが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

これらの警告をオフにする方法はありますか?

57
ev-br

pytest --helpから:

--disable-pytest-warnings
                      disable warnings summary, overrides -r w flag
50
The Compiler

pytest -p no:warnings

または、pytest.iniまたはtox.iniに次を追加します。

[pytest]
addopts = -p no:warnings

結果は緑色で表示され、警告は表示されません(もちろんテストが失敗しない限り)。

https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary を参照してください

60
Blaise

すべての警告を非表示にするのではなく、関連しない警告だけを非表示にする必要があると思います。この場合、インポートされたpythonモジュールからのdeprectation警告。

警告キャプチャ に関するpytestドキュメントを読んでください:

-Wコマンドラインオプションとfilterwarnings iniオプションはどちらもPython独自の -Wオプション および 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

EDITcolini のコメントから、モジュールでフィルタリングできます。すべてのsqlalchemyからの非推奨の警告を無視する例:

ignore::DeprecationWarning:sqlalchemy.*:

次に、pytestの出力にノイズが多すぎるインストール済みモジュールをリストできます。

コマンドラインではなくファイルで使用:

これらのフィルターをpytest.iniファイルにリストすることをお勧めします。

[pytest]
filterwarnings =
    ignore::DeprecationWarning
42
CloC

すべての警告を非表示にしたくないので、これをpytest.iniに入れます

[pytest]
filterwarnings =
    ignore::DeprecationWarning
2
Polv