unittest unitarias pruebas python testing

unittest - pruebas unitarias en python



¿Hay algo así como ''autotest'' para pruebas de unidad de Python? (10)

Básicamente, las notificaciones de gruñido (u otras devoluciones de llamada) cuando las pruebas se rompen o pasan. ¿Existe algo como esto?

Si no, debería ser bastante fácil de escribir ... La manera más fácil sería ...

  1. ejecutar python-autotest myfile1.py myfile2.py etc.py
    • Compruebe si se han modificado los archivos que se van a supervisar (posiblemente solo si se han guardado).
    • Ejecuta cualquier prueba en esos archivos.
    • Si una prueba falla, pero en la pasada anterior, genera una alerta de gruñido. Lo mismo con las pruebas que fallan luego pasan.
    • Espera y repite los pasos 2-5.

El problema que puedo ver es si las pruebas están en un archivo diferente. La solución simple sería ejecutar todas las pruebas después de cada guardado ... pero con pruebas más lentas, esto podría tomar más tiempo que el tiempo entre guardadas, y / o podría usar mucha potencia de la CPU, etc.

La mejor manera de hacerlo sería ver realmente qué bits de código han cambiado, si la función abc () ha cambiado, solo ejecutar pruebas que interactúen con esto ... Aunque sería genial, creo que sería extremadamente complejo ¿implementar?

Resumir:

  • ¿Hay algo como el autotest herramienta Ruby (parte del paquete ZenTest ), pero para el código Python?
  • ¿Cómo se verifica qué funciones han cambiado entre dos revisiones de un script?
  • ¿Es posible determinar a qué funciones llamará un comando? (Algo así como un rastreo inverso)

Acabo de encontrar esto: http://www.metareal.org/p/modipyd/

Actualmente estoy usando thumb.py, pero a medida que mi proyecto actual pasa de ser un proyecto pequeño a uno mediano, he estado buscando algo que pueda hacer un análisis de dependencia un poco más completo, y con algunos ajustes obtuve Modifica y ejecuta bastante rápido.



El servidor de desarrollo de Django tiene un monitor de cambio de archivos que busca modificaciones y se recarga automáticamente. Puede volver a utilizar este código para iniciar pruebas unitarias en la modificación de archivos.


En mi opinión, autonose es poco confiable, pero sniffer parece funcionar muy bien.

$ pip install sniffer $ cd myproject

Luego, en lugar de ejecutar "nosetests", ejecutas:

$ sniffer

O en lugar de nosetests --verbose --with-doctest , ejecutas:

$ sniffer -x--verbose -x--with-doctest

Como se describe en el sniffer , es una buena idea instalar una de las bibliotecas de observación de sistemas de archivos específicas de la plataforma, pyinotify , pywin32 o MacFSEvents (todas instaladas mediante pip etc.)


Para su tercera pregunta, tal vez el módulo de trace es lo que necesita:

>>> def y(a): return a*a >>> def x(a): return y(a) >>> import trace >>> tracer = trace.Trace(countfuncs = 1) >>> tracer.runfunc(x, 2) 4 >>> res = tracer.results() >>> res.calledfuncs {(''<stdin>'', ''<stdin>'', ''y''): 1, (''<stdin>'', ''<stdin>'', ''x''): 1}

res.calledfuncs contiene las funciones que fueron llamadas. Si especifica countcallers = 1 al crear el rastreador, puede obtener relaciones de llamador / destinatario. Consulte los documentos del módulo de trace para obtener más información.

También puede intentar recibir las llamadas a través de análisis estáticos, pero esto puede ser peligroso debido a la naturaleza dinámica de Python.




Una herramienta muy útil que puede hacer su vida más fácil es entr . Escrito en C, y usa kqueue o inotify debajo del capó.

El siguiente comando ejecuta su suite de prueba si se cambia cualquier archivo *.py en su proyecto.

ls */**.py | entr python -m unittest discover -s test

Funciona para BSD, Mac OS y Linux. Puede obtener entr de Homebrew.


autonose creado por gfxmonk :

Autonose es una herramienta similar al autotest para python, que utiliza la excelente biblioteca de nosetest.

autotest rastrea los cambios en el sistema de archivos y vuelve a ejecutar automáticamente las pruebas o dependencias modificadas cada vez que se agrega, elimina o actualiza un archivo. Un archivo cuenta como cambiado si ha sido modificado, o si ha cambiado algún archivo que import .

...

Autonose actualmente tiene una GUI nativa para OSX y GTK. Si ninguno de los dos está disponible para usted, puede ejecutar la versión de la consola (con la opción --console).


Guard es una herramienta excelente que supervisa los cambios de archivos y desencadena tareas automáticamente. Está escrito en Ruby, pero se puede usar como una herramienta independiente para cualquier tarea como esta. Hay un complemento de guard-nosetests para ejecutar pruebas de Python por la nose .

Guard admite notificaciones multiplataforma (Linux, OSX, Windows), incluido Growl, así como muchas otras características excelentes. Una de mis herramientas de desarrollo no puede vivir sin ella.