2009-03-05 9 views
7

Como estoy desarrollando pruebas unitarias para mi aplicación django, me encuentro ejecutando la prueba manage.py una y otra vez. Estoy usando un backend de MySQL y tengo muchos modelos en el proyecto, por lo que el tiempo de aceleración para crear todas las bases de datos de prueba es de aproximadamente 30 segundos.¿Cómo puedo ejecutar las pruebas de la unidad django (a través de manage.py) más rápido?

¿Cómo puedo hacer que las pruebas de cada unidad sean más rápidas manteniendo las tablas de la base de datos creadas y simplemente borrándolas de todas las ejecuciones intermedias del comando "manage.py test"?

Respuesta

7

Nota que no tiene que ejecutar todo el conjunto de pruebas cada vez. Puede ejecutar el conjunto de pruebas para una sola aplicación ejecutando manage.py test appname (o para varias aplicaciones a la vez con manage.py test app1 app2 ...).

Mi flujo de trabajo habitual es simplemente ejecutar las pruebas de la aplicación en la que estoy trabajando mientras trabajo, y ejecutar el conjunto completo antes de comprometer mi siguiente conjunto de cambios.

+0

Sin embargo, todavía crea la base de datos para cada módulo en INSTALLED_APPS, eso es lo que lleva más tiempo. – Bryce

4

Yo no lo he probado, pero no había un cheque reciente en el que se supone que ayuda al permitir que las pruebas que se ejecutan dentro transacciones que luego se deshacen:

Documentation y developer commentary

1

Utilizo un disco RAM para mi base de datos MySQL, ni siquiera lo describo rápidamente, combinado con solo probar la prueba específica dentro de la aplicación específica en la que está trabajando, puede reducir drásticamente el tiempo de prueba. Hay algunos scripts que automatizarán la creación del ramdisk para su base de datos, utilizo mysql-ramdisk.py que cocinó uno de mis compañeros de trabajo, esta versión es para Mac OS X. También hay una versión para Linux here. Me toma unos 30 segundos configurar todo para django dev, y mis pruebas a veces se ejecutan en menos de cinco segundos, incluida la creación de la base de datos de prueba predeterminada. ;)

0

Como publico en este hilo: How do I run a unit test against the production database?, creo un conjunto de pruebas que puede ejecutarse tanto en el db de producción (en mi máquina de desarrollo local, a través de "manage.py shell"), o en el django "manage" regular. suite de pruebas "py test". Ha sido un verdadero ahorro de tiempo para mí el hacer una rápida revisión de la cordura y la validación del tiempo durante el desarrollo. En cualquier caso, me estoy ejecutando contra el mismo DB (MySQL) y obtengo el ORM django en mis pruebas.

Cuestiones relacionadas