Po przeczytaniu dokumentacji SQLAlchemy i trochę manipulacji z instancją db, w końcu otrzymałem rozwiązanie. Dodaj db.get_engine(self.app).dispose()
w tearDown()
aby wyglądało to tak:
def tearDown(self):
db.session.remove()
db.drop_all()
db.get_engine(self.app).dispose()
self._ctx.pop()