Django 1.4单测运行过慢无--keepdb支持,除升级硬件外如何优化?
Django 1.4 测试数据库耗时优化方案
- 自定义测试运行器实现数据库复用逻辑:继承Django 1.4默认的
DjangoTestSuiteRunner,重写setup_databases和teardown_databases方法,第一次运行测试时正常创建测试数据库,后续运行直接跳过数据库销毁、重建步骤,仅在模型变更时手动删除旧测试库触发重建即可,可实现和高版本--keepdb参数完全一致的效果。 - 切换测试数据库为内存数据库:在测试配置的
DATABASES项中,将默认数据库的TEST_NAME参数设为:memory:,使用SQLite内存数据库承载测试数据,所有数据库操作都在内存中完成,无需磁盘IO,可大幅降低数据库创建、表结构初始化的耗时。 - 预生成测试数据库快照:如果必须使用和生产一致的数据库(如MySQL/PostgreSQL),可以将首次创建完成、包含基础测试数据的测试库导出为SQL快照,后续运行测试前直接导入快照初始化,不用重新执行全量迁移、初始数据导入逻辑,能节省90%以上的库初始化时间。
- 预加载公共测试fixture:将所有测试通用的初始化fixture提前导入到复用的测试数据库中,避免每次运行测试都重复加载fixture的耗时。
- 裁剪测试初始化逻辑:如果你的单测不需要修改数据库内容,可在自定义测试运行器中跳过事务回滚、表数据重置的步骤,直接复用已有的库数据运行测试。
内容的提问来源于stack exchange,提问作者guettli
相关产品推荐
相关产品推荐

