python - framework - ¿Cómo pruebo un esquema de base de datos django?
django tutorial español pdf (1)
Quiero escribir pruebas que puedan mostrar si la base de datos está sincronizada con mi archivo models.py o no. En realidad, ya los he escrito, solo para descubrir que django crea una nueva base de datos cada vez que se ejecutan las pruebas en función del archivo models.py. ¿Hay alguna manera de que pueda hacer que la prueba models.py use el esquema de base de datos existente? ¿El que está en mysql / postgresql, y no el que está en /myapp/models.py?
No me importan los datos que están en la base de datos, solo me importa su esquema, es decir, quiero que mis pruebas se den cuenta si una tabla en la base de datos tiene menos campos que el esquema en mi archivo models.py.
Estoy usando el framework unittest (en realidad, la extensión django) si esto tiene alguna relevancia.
Gracias
Lo que hicimos fue anular el valor predeterminado de test_runner para que no creara una nueva base de datos para probar. De esta forma, ejecuta la prueba en contra de lo que sea nuestra base de datos local actual. Pero tenga mucho cuidado si usa este método porque cualquier cambio en los datos que realice en sus pruebas será permanente. Me aseguré de que todas nuestras pruebas restauraran los cambios a su estado original y mantuviéramos una copia de seguridad de nuestra versión prístina de nuestra base de datos en el servidor.
Para hacer esto, debe copiar el método run_test de django.test.simple a una ubicación en su proyecto. Puse el mío en myproject / test / test_runner.py
Luego realice los siguientes cambios a ese método:
// change
old_name = settings.DATABASE_NAME
from django.db import connection
connection.creation.create_test_db(verbosity, autoclobber=not interactive)
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
connection.creation.destroy_test_db(old_name, verbosity)
// to:
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
Asegúrese de hacer todas las importaciones necesarias en la parte superior y luego en su archivo de configuración establecer la configuración:
TEST_RUNNER = ''myproject.test.test_runner.run_tests''
Ahora cuando ejecute la prueba ./manage.py, Django ejecutará las pruebas contra el estado actual de su base de datos en lugar de crear una nueva versión basada en las definiciones de su modelo actual.
Otra cosa que puede hacer es crear una copia de su base de datos localmente, y luego hacer una verificación en su nuevo método run_test () como este:
if settings.DATABASE_NAME != ''my_test_db'':
sys.exit("You cannot run tests using the %s database. Please switch DATABASE_NAME to my_test_db in settings.py" % settings.DATABASE_NAME)
De esta forma, no hay peligro de ejecutar pruebas contra su base de datos principal.