Django 测试在测试数据库创建上浪费了太多时间

Django testing wastes too much time on test database creating

我们试图覆盖一个旧的大项目的测试,该项目在数据库中有超过 500 个表,并且在数据库创建(我的 RMBP 超过 1 小时)和数据库迁移上浪费了太多时间。

我们正在使用 PostgreSQL 作为数据库,因为一些 GIS 服务需要它,所以很难用 SQLite 来代替它。

我可以做些什么来减少测试准备时间?

在某些时候,我最终创建了一个事务管理中间件,它将拦截事务调用,以便所有测试都在一个事务中 运行,然后事务在最后回滚。

另一种选择是在每次测试开始时加载一个二进制数据库转储,然后在测试之间删除并重新创建数据库。创建好数据库后,使用 xtrabackup 创建它的转储。然后,在每个测试设置函数中,删除并创建数据库,然后使用 xtrabackup 加载转储。由于它是二进制转储,因此加载速度相当快。

您可以使用 django-nose 并像这样重用数据库:

REUSE_DB=1 ./manage.py test

请注意您的测试不要在数据库中留下任何垃圾。查看 documentation 了解更多信息。