Escribo pruebas para la aplicación CRUD y quiero estar seguro de que su comportamiento es correcto en diferentes escenarios cuando la conexión a la base de datos se pierde de forma permanente o temporal.
Por ahora, parcheo session.execute en medio de la sesión con OperationalError side_effect. ¿Existe una simulación mejor o más realista de la interrupción de la conexión?
Lo que quiero lograr se ve así:
def test_interrupted_connection(self, client):
query = text("SELECT 1")
with sessionmaker.begin() as s:
# Successful execute
s.execute(query)
# Failed execute
with pytest.raises(OperationalError):
# I guess here should be some monkeypatching or mocking
# which will make SQLAlchemy think that connection
# is lost during .execute() call below
# But I don't know how it should look like.
s.execute(query). Puede invalidar la conexión SQL usando
#db = create_engine('auth_url')
#conn = db.connect()
conn.invalidate()
db.dispose(
Pero si desea saber cómo se comportará su aplicación en caso de falla de la base de datos, la mejor manera de matar todas sus conexiones de base de datos. Esto generalmente sucede cuando escala sus rds (hay un pequeño tiempo de inactividad) y obtendrá el error de No se encontró una base de datos activa y luego podrá verificar el comportamiento de su aplicación.