在Django加速单元测试

在Django加速单元测试,django,performance,unit-testing,Django,Performance,Unit Testing,我发现执行unittest很慢,尤其是Django中的数据库操作 它经历了创建数据库、表、夹具、测试以及最终销毁它们的整个过程 我甚至花了将近半分钟来做这些事情 在不考虑机器速度的情况下,有没有其他方法来加速Django中的unittest或加速提示?当我想要运行测试时,我要做的是切换到SQLite。在SQLite中设置测试数据库所需的时间要少得多 您可以通过使用修改后的设置文件轻松完成此操作: $ python manage.py test my_app --settings=test_set

我发现执行unittest很慢,尤其是Django中的数据库操作

它经历了创建数据库、表、夹具、测试以及最终销毁它们的整个过程

我甚至花了将近半分钟来做这些事情


在不考虑机器速度的情况下,有没有其他方法来加速Django中的unittest或加速提示?

当我想要运行测试时,我要做的是切换到SQLite。在SQLite中设置测试数据库所需的时间要少得多

您可以通过使用修改后的设置文件轻松完成此操作:

$ python manage.py test my_app --settings=test_settings
或者就我而言

$ python manage.py test my_app --settings=settings.test

当我使用“设置为包”方案时。

您可以加速运行它们的测试

看一看。它有许多有用的提示,如:

  • 将密码散列函数更改为MD5(对我来说有了巨大的改进)
  • 使用更快的内存数据库
  • 禁用不需要的应用程序和中间件

既然你说运行测试需要30秒,我假设你已经只运行了应用程序的测试(而不是整个django测试套件)。有了这一假设,要消除的瓶颈可能是sqlite(这相当慢)。我建议安装一个本地postgres/mysql服务器,并改用它。@OwenNelson:奇怪的是,SQLite对Django测试来说是一个巨大的速度提升。轻松将45-50秒的测试套件压缩到7-10秒secs@OwenNelson,我正在使用MySQL,不是在我的机器上,而是在局域网中的远程主机上。也许,在我的机器上移动db服务器会很好。谢谢提醒。相关问题:@Javier我很惊讶听到sqlite对你来说更快。一般来说,由于它是一种无服务器、基于磁盘的实现,因此在处理大量插入/更新/删除(这对于大型装置来说是很自然的)时,您将遇到磁盘/文件争用问题(等待锁定)。在有fixture数据的情况下,我经常发现实际的RMDBs要快得多**我这样说是假设fixture数据足够大,当然不能在:memory:中运行sqlite。谢谢,我会试试。但在此之前,我如何处理MySQL和SQLite之间的不兼容问题,因为许多db操作都是在原始sql中完成的。@xiaohan2012,不幸的是,这个解决方案对您没有帮助。
    DATABASES['default'] = {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': ':memory:'
    }