Comment dire à py.test de sauter certains répertoires?

91

J'ai essayé d'utiliser l' norecursedirsoption dans setup.cfg pour dire à py.test de ne pas collecter de tests à partir de certains répertoires mais il semble qu'il l'ignore.

[tool:pytest]
norecursedirs=lib/third

Quand je cours, py.testje vois comment il obtient des tests de l'intérieur lib/third!

Sorin
la source
Il semble que j'ai py.testet les pytestdeux exécutent des tests et sont des bêtes différentes. Étrange mais pytestest celui qui échoue car il ne charge pas les exclusions à partir de [pytest].
sorin le
1
pytestest de logilab. Tu veux py.test.
ecatmur
3
essayez aussi de fairenosecuredirs=lib/third/*
intelis
existe-t-il un moyen d'ignorer certains dossiers dans le script lui-même avec du code?
bicepjai
2
s'est retrouvé ici parce que j'étais curieux de savoir pourquoi mon pytest d'applications Web dans le développement local est si extrêmement lent ... La raison était un répertoire de ressources téléchargé avec une structure imbriquée yy / jj / mm .... ce qui est vraiment nul! Heureusement , [pytest] norecursedirs = resourcesen pytest.inifait un tour de 💪!
andilabs

Réponses:

85

py.test --ignore=somedir travaillé pour moi

shadfc
la source
5
Et --ignorepeut être spécifié plusieurs fois pour ignorer plusieurs répertoires
phoenix
Comment sauter certains tests au lieu du répertoire
Rajat jain
Vous pouvez utiliser l' -koption comme le montre une autre réponse ci-dessous. Voir «Exécuter des tests par expressions de mots-clés» sur docs.pytest.org/en/latest/… . Les marques peuvent également être utiles ici. Marquez vos tests comme "lents", etc., puis utilisez-k "not slow"
shadfc
Il est également possible d'utiliser--ignore-glob pour ignorer les chemins de fichiers de test basés sur des caractères génériques de style shell Unix. Par exemple --ignore-glob=**/sandbox/*, ignorera tous les fichiers dans n'importe quel sandboxdossier.
Jan M.
28

Si vous avez plusieurs répertoires avec des parents différents, vous pouvez spécifier différents --ignoreparamètres:

py.test --ignore=somedir --ignore=otherdir --ignore=etcdir

  • nouvelle option: --ignore empêchera le chemin spécifié de la collection.
    Peut être spécifié plusieurs fois.
David Batista
la source
23

J'ai résolu le mystère: si une section pytest est trouvée dans l'un des fichiers de configuration possibles ( pytest.ini, tox.iniet setup.cfg), pytest n'en recherchera pas d'autres, alors assurez-vous de définir les options py.test dans un seul fichier.

Je suggérerais d'utiliser setup.cfg.

Sorin
la source
8
Pourquoi setup.cfg? La documentation actuelle semble recommander les deux autres
jebob le
Je pense qu'il est important de mentionner que si vous souhaitez utiliser un .inifichier, vous devez le spécifier avec pytest -c pytest.ini. pour une raison quelconque, le setup.cfgcontenu a été récupéré automatiquement.
therightstuff
17

Vous pouvez utiliser

py.test -k 'not third'

qui exclut tout le contenu du «troisième» répertoire.

Salvatore Avanzo
la source
11

norecursedirsdevrait marcher. Vérifiez si vous disposez d'un pytest.ini ou d'autres fichiers setup.cfg. Comment invoquez-vous py.test?

ecatmur
la source
1
J'ai setup.cfgavec le bon [pytest]et le norecorsedirs à l'intérieur, mais il semble être ignoré, et à la place, il recherchera tous les fichiers.
sorin
8

Dans mon cas, le problème était le caractère générique manquant. Ce qui suit fonctionne pour moi:

[tool:pytest]
norecursedirs = subpath/*

alors que norecursedirs = subpathnon.

bluenote10
la source
Pareil ici. Comportement très étrange cependant.
azmeuk le
0

Pour utiliser pytest.ini(ce qui est recommandé, à moins que vous n'utilisiez toxdans quel cas cela tox.iniaurait du sens), appelez pytestavec pytest -c pytest.ini.

Afin d'empêcher mon échantillon not_me_1.pyet not_me_2.pyd'être testé ou pelucheux, mon pytest.iniest comme suit:

[pytest]
addopts = --ignore-glob=not_me_*

[pycodestyle]
ignore = not_me_* ALL

le droit
la source