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


94

pytestの内部非推奨の警告を抑制する方法はありますか?

コンテキスト:テストスイートをからnoseに移植する難しさを評価したいと考えていpytestます。スイートはかなり大きく、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

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

回答:


85

からpytest --help

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

4
ヘルプテキストが言うように、これはテキストの要約のみを省略します。結果はまだ黄色で、警告があることを示します。
DavidPärsson17年

以下に示すように、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で説明されているように、Deprecation警告(およびモジュールごと)だけを無効にすることが、これを行う正しい方法です。
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

したがって、あなたの場合、それらのような無視したい警告のタイプをフィルタリングしたい場合は、オプションでDeprecationWarningpytestコマンドを実行してください-W

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

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

ignore::DeprecationWarning:sqlalchemy.*:

次に、インストールされているモジュールを一覧表示して、出力にノイズが多すぎるようにすることができます pytest

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

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

[pytest]
filterwarnings =
    ignore::DeprecationWarning

9
モジュールでフィルタリングするには、正規表現を使用します。すべてのsqlalchemyモジュールからの非推奨警告を無視する例:ignore::DeprecationWarning:sqlalchemy.*:
colini '25年

@coliniは-Wフラグの引数としては失敗しましたが、pytest.iniファイルで機能しました。
WhiteHotLoveTiger

6

pytest.iniファイルには、次のものを追加できます。

[pytest]
addopts = -p no:warnings

または、コマンドラインで行の下を渡します。これは、テストスイートが外部システムを使用して警告を処理する場合に役立ちます。

-p no:warnings

または、特定の非推奨の警告のみを非表示にする場合は、pytest.iniファイルに以下のステートメントを追加します

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

これにより、メッセージの先頭が正規表現「。* U. * mode is deprecated」に一致するDeprecationWarningタイプのすべての警告が無視されます。

またはお勧めしませんが、

--disable-warnings

テストの実行出力から警告の概要を完全に抑制するコマンドラインオプション。


5

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

[pytest]
filterwarnings =
    ignore::DeprecationWarning
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.