Me he encontrado con una situación extraña. Estoy escribiendo algunos casos de prueba para mi programa. El programa está escrito para trabajar en sqllite o postgresqul dependiendo de las preferencias. Ahora estoy escribiendo mi código de prueba usando unittest. Muy básicamente lo que estoy haciendo:python sqlalchemy + postgresql programa congela
def setUp(self):
"""
Reset the database before each test.
"""
if os.path.exists(root_storage):
shutil.rmtree(root_storage)
reset_database()
initialize_startup()
self.project_service = ProjectService()
self.structure_helper = FilesHelper()
user = model.User("test_user", "test_pass", "[email protected]",
True, "user")
self.test_user = dao.store_entity(user)
en la configuración elimino todas las carpetas que existen (creados por algunas pruebas) entonces restablecer mi base de datos (tablas de caída en cascada básicamente) entonces inicializar la base de datos de nuevo y crear un poco servicios que se usarán para las pruebas.
def tearDown(self):
"""
Remove project folders and clean up database.
"""
created_projects = dao.get_projects_for_user(self.test_user.id)
for project in created_projects:
self.structure_helper.remove_project_structure(project.name)
reset_database()
derribar hace lo mismo, excepto la creación de los servicios, ya que este módulo de prueba es parte de un mismo conjunto con otros módulos y no quiero que las cosas se quedan atrás por algunas pruebas.
Ahora todas mis pruebas se ejecutan bien con SQLLite. Con postgresql me encuentro con una situación muy extraña: en algún punto de la ejecución, que en realidad difiere de ejecución a ejecución por un pequeño margen (por ejemplo, una o dos llamadas adicionales), el programa simplemente se detiene. Quiero decir que no se genera ningún error, no se lanza ninguna excepción, el programa simplemente se detiene.
Ahora lo único que se me ocurre es que de alguna manera me olvido de una conexión abierta en algún lugar y después de que haya transcurrido el tiempo y algo sucede. Pero tengo MUCHAS conexiones, así que antes de comenzar a recorrer todo ese código, agradecería algunas sugerencias/opiniones.
¿Qué podría causar este tipo de comportamiento? ¿Por dónde empezar a buscar?
Saludos, Bogdan
Sería bueno mencionar esto en algún lugar de la documentación. Encontré exactamente el mismo problema después de cambiar de sqlite a Postgre. – schlamar
aquí va, estado allí desde hace años: http://www.sqlalchemy.org/trac/wiki/FAQ#MyprogramishangingwhenIsaytable.dropmetadata.drop_all – zzzeek
"... que han accedido a esa tabla de alguna manera (SELECT incluido)." Bueno, ¡esto salvó mi salud mental! ¡Muchas gracias! – Tregoreg