164 votes

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

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

Contexte : Je cherche à évaluer la difficulté du portage d'une suite de tests à partir de nose a pytest . La suite est assez grande et utilise beaucoup nose -style yield des générateurs de test.

Je voudrais d'abord m'assurer que le existant les tests passent avec pytest, et ensuite peut-être changer les générateurs de tests pour parameterized .

Je cours. $ pytest path-to-test-folder avec pytest 3.0.4 est complètement dominée par des pages et des 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 ?

155voto

The Compiler Points 166

Desde pytest --help :

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

8 votes

Comme le dit le texte d'aide, cela ne fera qu'omettre le résumé textuel. Le résultat sera toujours jaune et indiquera qu'il y a des avertissements.

1 votes

Il est préférable de le mettre dans le fichier pytest.ini, comme indiqué ci-dessous.

146voto

CloC Points 658

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éprogrammation des modules python importés.

En lisant la documentation de pytest sur Avertissements Capture :

L'option de ligne de commande -W et l'option ini filterwarnings sont toutes deux basées sur l'algorithme Python Option -W y warnings.simplefilter Veuillez donc vous référer à ces sections dans la documentation Python pour d'autres exemples et une utilisation avancée.

Vous pouvez donc filtrer les avertissements avec la fonction de python -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 au sujet de Filtres d'avertissement par défaut dit clairement :

Dans les versions régulières, le filtre d'avertissement par défaut possède les les entrées suivantes (par ordre de préséance) :

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

Donc, dans votre cas, si vous voulez laisser dire de filtrer les types d'avertissement que vous voulez ignorer, tels que ceux DeprecationWarning il suffit de lancer la commande pytest avec -W option :

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

EDITAR : A partir de colini Il est possible de filtrer par module. Exemple pour ignorer les avertissements de dépréciation de tous les modules sqlalchemy :

ignore::DeprecationWarning:sqlalchemy.*:

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

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

Vous pouvez préférer lister ces filtres dans le fichier pytest.ini :

[pytest]
filterwarnings =
    ignore::DeprecationWarning

23 votes

Pour filtrer sur le module, vous utilisez une regex. Exemple pour ignorer les avertissements de dépréciation de tous les modules sqlalchemy : ignore::DeprecationWarning:sqlalchemy.*:

1 votes

@colini cela n'a pas fonctionné pour moi comme argument pour le drapeau -W, mais cela a fonctionné pour moi dans mon fichier pytest.ini.

3 votes

Dans pytest 6.1 la regex de fin ne fonctionne pas pour moi, mais vous pouvez insérer une regex au milieu pour correspondre au début du message d'avertissement. ignore:.*U.*mode is deprecated:DeprecationWarning ignore tous les avertissements de type DeprecationWarning dont le début du message correspond à l'expression régulière ".*U.*mode is deprecated". plus d'infos

125voto

Blaise Points 1979

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. Voir la documentation à l'adresse https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary .

Cela peut être un cas d'utilisation valide pour une suite de tests où vous voulez une sortie propre.

Sachez que le fait de toujours masquer tous les avertissements peut vous faire manquer des avertissements importants. Si vous souhaitez masquer uniquement des avertissements spécifiques, consultez la réponse de Cloc. .

4 votes

addopts = -p no:warnings est une VRAIE MAUVAISE idée, et la solution de CloC est beaucoup plus saine, mais j'ai dû utiliser la vôtre quand ignore::InsecureRequestWarning n'a pas été reconnu, donc vous obtenez +1 aussi

0 votes

Désactivation de tous de façon persistante (c'est-à-dire en utilisant pytest.ini) n'est presque jamais une bonne idée. Désactiver uniquement l'avertissement de dépréciation (et par module) comme CloC le décrit est la bonne façon de faire.

22voto

pk786 Points 53

Dans le fichier pytest.ini vous pouvez ajouter :

[pytest]
addopts = -p no:warnings

OU en passant la ligne ci-dessous dans la ligne de commande. Cela peut être utile si vos suites de tests gèrent les avertissements en utilisant un système externe.

-p non:avertissements

OU Si vous voulez seulement cacher un avertissement spécifique, ajoutez la déclaration suivante dans votre fichier pytest.ini

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

Ceci ignorera tous les avertissements de type DeprecationWarning dont le début du message correspond à l'expression régulière ".*U.*mode is deprecated".

OU Bien que cela ne soit pas recommandé, vous pouvez utiliser le

--disable-warnings

pour supprimer entièrement le résumé de l'avertissement de la sortie de l'exécution du test.

11voto

Polv Points 130

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

[pytest]
filterwarnings =
    ignore::DeprecationWarning

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X