¿Cómo decirle a py.test que omita ciertos directorios?

91

Intenté usar la norecursedirsopción dentro de setup.cfg para decirle a py.test que no recopile pruebas de ciertos directorios, pero parece que lo ignora.

[tool:pytest]
norecursedirs=lib/third

¡Cuando corro py.test, veo cómo obtiene pruebas desde adentro lib/third!

sorin
fuente
Parece que tengo pruebas de ejecución py.testy pytestambos son bestias diferentes. Extraño pero pytestes el que falla porque no carga las exclusiones de [pytest].
sorin
1
pytestes de logilab. Quieres py.test.
ecatmur
3
también intenta hacernosecuredirs=lib/third/*
intelis
¿Hay alguna manera de ignorar algunas carpetas en el propio script con código?
bicepjai
2
Terminé aquí porque tenía curiosidad por saber por qué diablos mi pytest de la aplicación web en el desarrollo local es tan extremadamente lento ... La razón fue un directorio de recursos cargado con una estructura anidada yy / dd / mm ... ¡lo que realmente apesta! afortunadamente [pytest] norecursedirs = resourcesen pytest.inihace un truco 💪!
andilabs

Respuestas:

85

py.test --ignore=somedir trabajó para mi

shadfc
fuente
5
Y --ignorese puede especificar varias veces para ignorar varios directorios
phoenix
Cómo omitir ciertas pruebas en lugar del directorio
Rajat jain
Puede usar la -kopción como muestra otra respuesta a continuación. Consulte "Ejecutar pruebas mediante expresiones de palabras clave" en docs.pytest.org/en/latest/… . Las marcas también pueden ser útiles aquí. Marque sus pruebas como "lentas", etc. y luego use-k "not slow"
shadfc
También se puede utilizar--ignore-glob para ignorar las rutas de los archivos de prueba basados ​​en comodines de estilo shell de Unix. Por ejemplo --ignore-glob=**/sandbox/*, ignorará todos los archivos de cualquier sandboxcarpeta.
Ene M.
28

Si tiene varios directorios con diferentes padres, puede especificar diferentes --ignoreparámetros:

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

  • nueva opción: --ignore evitará que se recopile la ruta especificada.
    Puede especificarse varias veces.
David Batista
fuente
23

Resolví el misterio: si se encuentra una sección de pytest en uno de los posibles archivos de configuración ( pytest.ini, tox.iniysetup.cfg ), pytest no buscará otros, así que asegúrese de definir las opciones de py.test en un solo archivo.

Sugeriría usar setup.cfg.

sorin
fuente
8
¿Por qué setup.cfg? La documentación actual parece recomendar los otros dos
jebob
Creo que es importante mencionar que si desea utilizar un .iniarchivo, debe especificarlo con pytest -c pytest.ini. por alguna razón, los setup.cfgcontenidos se recogieron automáticamente.
therightstuff
17

Puedes usar

py.test -k 'not third'

que excluye todo el contenido del directorio "tercer".

Salvatore Avanzo
fuente
11

norecursedirsDeberia trabajar. Compruebe si tiene un archivo pytest.ini u otro archivo setup.cfg. ¿Cómo estás invocando py.test?

ecatmur
fuente
1
Tengo setup.cfglos [pytest]archivos correctos y no correctos en el interior, pero parece que se ignora y, en cambio, buscará todos los archivos.
sorin
8

En mi caso, el problema fue el comodín que faltaba. Lo siguiente funciona para mí:

[tool:pytest]
norecursedirs = subpath/*

mientras que simplemente norecursedirs = subpathno lo hizo.

bluenote10
fuente
Igual que aquí. Sin embargo, comportamiento muy extraño.
azmeuk
0

Para usar pytest.ini(que se recomienda, a menos que esté usando, toxen cuyo caso tox.initendría sentido), llame pytestcon pytest -c pytest.ini.

Con el fin de evitar que mi muestra not_me_1.pyy not_me_2.pyde que se investiga o linted, mis pytest.inies como sigue:

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

[pycodestyle]
ignore = not_me_* ALL

lo correcto
fuente