web-dev-qa-db-fra.com

Comment supprimer les avertissements de dépréciation interne py.test

Existe-t-il un moyen de supprimer les avertissements de dépréciation internes du pytest?

Contexte: Je cherche à évaluer la difficulté de porter une suite de tests de nose à pytest. La suite est assez grande et utilise beaucoup de générateurs de test basés sur nose-style yield.

J'aimerais d'abord m'assurer que les tests existants réussissent avec pytest, et ensuite peut-être remplacer les générateurs de test par parameterized.

Il suffit de courir $ pytest path-to-test-folder avec pytest 3.0.4 est complètement dominé par les pages et les pages de

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

Existe-t-il un moyen de désactiver ces avertissements?

57
ev-br

De pytest --help:

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

pytest -p no:warnings

ou ajoutez ce qui suit à votre pytest.ini ou tox.ini:

[pytest]
addopts = -p no:warnings

Le résultat sera vert sans aucune indication d'avertissement (à moins que les tests échouent bien sûr).

Voir https://docs.pytest.org/fr/latest/warnings.html#disabling-warnings-summary

60
Blaise

Je pense que vous ne voulez pas masquer tous les avertissements, mais seulement ceux qui ne sont pas pertinents. Et dans ce cas, les avertissements de dépréciation des modules importés python.

Avoir lu la documentation de pytest sur Warnings Capture :

Les options de ligne de commande -W et filterwarnings ini sont toutes deux basées sur les propres (option -W) et warnings.simplefilter de Python. Veuillez vous reporter à ces sections Python pour d’autres exemples et une utilisation avancée.

Ainsi, vous pouvez filtrer les avertissements avec -W option!

Il semble que pytest supprime complètement les filtres, car il montre tous ces DeprecationWarning lors de l'exécution, et la documentation de Python sur filtres d'avertissement par défaut indique clairement:

Dans les versions de version standard, le filtre d'avertissement par défaut comporte les entrées suivantes (par ordre de priorité):

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

Donc, dans votre cas, si vous voulez laisser filtrer les types d’avertissements que vous voulez ignorer, tels que ceux DeprecationWarning, il suffit d’exécuter la commande pytest avec -W option:

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

[~ # ~] éditer [~ # ~] : à partir du commentaire de colini , il est possible de filtrer par module . Exemple pour ignorer les avertissements de dépréciation de tout sqlalchemy:

ignore::DeprecationWarning:sqlalchemy.*:

Vous pouvez ensuite lister vos modules installés qui créent trop de bruit dans la sortie de pytest

Utilisez avec fichier plutôt qu'en ligne de commande:

Vous préférerez peut-être lister ces filtres dans le fichier pytest.ini:

[pytest]
filterwarnings =
    ignore::DeprecationWarning
42
CloC

Je ne veux pas cacher tous les avertissements, alors j'ai mis ceci dans pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning
2
Polv