plu*_*mPy 7 python integration-testing unit-testing sqlalchemy alembic
我有一个 ORM 应用程序,它使用 SQLAlchemy、Alembic 进行迁移,使用 Pytest 进行测试。在我的测试中,我有一个数据库作为固定装置。在使用迁移之前,我曾经删除所有表并为每个测试会话重新创建它们。
现在我正在使用迁移,我也想使用 Alembic 来创建我的装置,因为我相信它可以更接近地模拟生产环境。(这是一个很好的理由吗?)
一种方法是每次downgrade()都从上到下upgrade()。我真的不喜欢这个。我可能错了。
另一种方法是进行drop_all()单元create_all()测试,只需编写另一个测试,用 head 标记数据库并测试upgradeand downgrade。
是否有另一种好的/标准方法将迁移与固定装置集成,这样我就不必使用drop_tables?
或者有没有办法在drop_tables将数据库标记为“尾部”或空之后?如果没有明确使用修订版 0 的迁移哈希,则会导致创建依赖项,类似的事情alembic downgrade -1会使其返回到第 0 年。谢谢。
我建议每次启动一个临时数据库实例,例如使用testing.mysqld或testing.postgresql。这种方法的优点是保证您每次都能重新开始;测试的成功不取决于外部因素。缺点是启动实例需要额外的几秒钟时间。
如果您坚持使用现有的数据库实例,您可以像您所说的那样使用create_all()+ alembic stamp head。但是,不必执行 操作drop_all(),只需删除整个数据库(或模式,对于 PostgreSQL 而言)并重新创建它。
如果你坚持使用drop_all(),你可以删除该alembic_version表来告诉alembic当前版本是“tail”。