Pregunta

Mi IVU se parece a:

foo.py
bar.py
tests/__init__.py [empty]
tests/foo_tests.py
tests/bar_tests.py
tests/integration/__init__.py [empty]
tests/integration/foo_tests.py
tests/integration/bar_tests.py

cuando corro nosetests --with-coverage, Obtengo detalles para todo tipo de módulos que prefiero ignorar.Pero no puedo usar el--cover-package=PACKAGE opción porque foo.py & bar.py no se encuentran en un paquete.(Ver el hilo despuéshttp://lists.idyll.org/pipermail/testing-in-python/2008-November/001091.htmlpor mis razones para no ponerlos en un paquete.)

¿Puedo restringir la salida de cobertura solo a foo.py y bar.py?

Actualizar - Suponiendo que no hay mejor respuesta que NadiaA continuación, hice una pregunta de seguimiento: "¿Cómo escribo algún script de shell (bash) para convertir todos los nombres de archivos coincidentes en el directorio en opciones de línea de comandos?"

¿Fue útil?

Solución

Puede utilizar de esta manera:

--cover-package=foo --cover-package=bar

Yo tenía un vistazo rápido a la nariz código fuente para confirmar: Esta es la línea

    if options.cover_packages:
        for pkgs in [tolist(x) for x in options.cover_packages]:

Otros consejos

Puede utilizar:

--cover-package=.

o incluso conjunto variable de entorno

NOSE_COVER_PACKAGE=.

Probado con nariz 1.1.2

Tengo muchos archivos/paquetes de Python de nivel superior y me resulta molesto enumerarlos todos manualmente usando --cover-package, así que creé dos alias para mí.Alias nosetests_cover ejecutará la cobertura con todos sus archivos/paquetes Python de nivel superior enumerados en --cover-package.Alias nosetests_cover_sort hará lo mismo y además ordenará sus resultados por porcentaje de cobertura.

nosetests_cover_cmd="nosetests --with-coverage --cover-erase --cover-inclusive --cover-package=\$( ls | sed -r 's/[.]py$//' | fgrep -v '.' | paste -s -d ',' )"
alias nosetests_cover=$nosetests_cover_cmd
alias nosetests_cover_sort="$nosetests_cover_cmd 2>&1 | fgrep '%' | sort -nr -k 4"

Notas:

  • Esto es de mi archivo .bashrc.Modifique adecuadamente si no usa bash.
  • Estos deben ejecutarse desde su directorio de nivel superior.De lo contrario, los nombres de los paquetes serán incorrectos y la cobertura dejará de procesarlos silenciosamente (es decir,en lugar de decirle que su --cover-package es incorrecto, actuará como si no hubiera proporcionado la opción en absoluto).
  • Actualmente estoy usando Python 2.7.6 en Ubuntu 13.10, con la versión nasal 1.3.0 y la versión de cobertura 3.7.1.Esta es la única configuración en la que he probado estos comandos.
  • En su uso, elimine --cover-erase y --cover-inclusive si no se ajustan a sus necesidades.
  • Si desea ordenar en orden normal en lugar de orden inverso, reemplace -nr con -n en el comando de clasificación.
  • Estos comandos asumen que todos sus archivos/paquetes Python de nivel superior tienen nombres sin punto (aparte del punto en ".py").Si esto no es cierto para usted, lea la sección Detalles a continuación para comprender las partes de los comandos y luego modifique los comandos según corresponda.

Detalles:

No pretendo que estos sean los comandos más eficientes para lograr los resultados que quiero.Son solo los comandos que se me ocurrieron.=P

Lo principal a explicar sería el argumento de --cover-package.Crea la lista separada por comas de nombres de archivos/paquetes de Python de nivel superior (con ".py" eliminado de los nombres de archivos) de la siguiente manera:

  • \$ -- Escapa del $ carácter en una cadena entre comillas dobles.
  • $( ) -- Inserta el resultado del comando contenido en él.
  • ls -- Enumera todos los nombres en el directorio actual (debe ser el directorio de Python de nivel superior).
  • | sed -r 's/[.]py$//' -- En la lista, reemplaza "foo_bar.py" por "foo_bar".
  • | fgrep -v '.' -- En la lista, elimina todos los nombres sin punto (p. ej.elimina foo_bar.pyc y notes.txt).
  • | paste -s -d ',' -- Cambia la lista de separada por nueva línea a separada por coma.

También debería explicar la clasificación.

  • 2>&1 -- Se une a stderr y stdout.
  • | fgrep '%' -- Elimina todas las líneas de salida sin un % personaje.
  • | sort -nr -k 4 -- Ordena las líneas restantes en orden numérico inverso según la cuarta columna (que es la columna del porcentaje de cobertura).Si desea el orden normal en lugar del orden inverso, reemplace -nr con -n.

¡Espero que esto ayude a alguien!=)

Si utiliza : py 3,0 , a continuación, el código en el directorio de Python es ignorado por defecto, incluyendo la biblioteca estándar y todos los paquetes instalados.

Me gustaría hacer esto:

nosetests --with-coverage --cover-package=foo,bar tests/*

Yo prefiero esta solución a los otros sugirieron; es simple, pero que son explícitos acerca de los paquetes que desea tener cobertura para. La respuesta de Nadia implica una gran cantidad de escritura mucho más redundante, la respuesta de Stuart utiliza sed y todavía crea un paquete invocando touch __init__.py, y --cover-package=. no funciona para mí.

Para cualquier persona que intenta hacer esto con setup.cfg, las siguientes obras. Tuve algunos problemas para averiguar cómo especificar varios paquetes.

[nosetests]
with-coverage=1
cover-html=1
cover-package=module1,module2
touch __init__.py; nosetests --with-coverage --cover-package=`pwd | sed 's@.*/@@g'`

Se puede mejorar la respuesta aceptada como tal --cover-package=foo,bar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top