【问题标题】:How can I run django unit tests (through manage.py) faster如何更快地运行 django 单元测试(通过 manage.py)
【发布时间】:2010-10-11 14:47:05
【问题描述】:

当我为我的 django 应用程序开发单元测试时,我发现自己一遍又一遍地运行 manage.py 测试。我正在使用 MySQL 后端并且项目中有许多模型,因此创建所有测试数据库的加速时间约为 30 秒。

如何通过保持创建数据库表并在运行“manage.py test”命令之间清除所有记录来使每个单元测试更快?

【问题讨论】:

    标签: django unit-testing testing


    【解决方案1】:

    我还没有尝试过,但最近有一个检查应该有助于通过允许测试在事务中运行然后回滚:

    Documentationdeveloper commentary

    【讨论】:

      【解决方案2】:

      请注意,您不必每次都运行整个测试套件。您可以通过运行manage.py test appname(或同时使用manage.py test app1 app2 ... 为多个应用程序)运行单个应用程序的测试套件。

      我通常的工作流程是在我工作时为我正在开发的应用程序运行测试,并在我提交下一组更改之前运行整个套件。

      【讨论】:

      • 然而,它仍然为 INSTALLED_APPS 中的每个模块创建数据库,这需要更多时间。
      【解决方案3】:

      您可以使用 sqlite 数据库后端运行您的测试。它不适合完整的测试运行(因为数据库不同),但对于健全性检查,它可以节省大量时间。见:http://mindlesstechnology.wordpress.com/2008/08/16/faster-django-unit-tests/

      【讨论】:

        【解决方案4】:

        我为我的 MySQL 数据库使用 ram-disk,快速甚至没有描述它,结合仅在您正在开发的特定应用程序中测试特定测试可以显着缩短测试时间。有一些脚本可以自动为您的数据库创建 ramdisk,我使用mysql-ramdisk.py,这是我的一位同事制作的,此版本适用于 Mac OS X。还有一个适用于 Linux 的版本@987654322 @。我花了大约 30 秒来为 django dev 设置好整个东西,我的测试有时会在 5 秒内运行,包括创建默认测试数据库。 ;)

        【讨论】:

          【解决方案5】:

          正如在此线程中发布的:How do I run a unit test against the production database?,我创建了一个测试套件,可以针对生产数据库(在我的本地开发机器上,通过“manage.py shell”)或常规 django“manage.py”运行测试”测试套件。在开发过程中进行快速健全性检查和提交时间验证对我来说是一个真正的节省时间。在任何一种情况下,我都在同一个数据库(MySQL)上运行,并在我的测试中获得 django ORM。

          【讨论】:

            【解决方案6】:

            您可以使用以下标志防止您的测试数据库在 Django 1.8+ 的测试运行之间被破坏:

            --keepdb
            

            (https://docs.djangoproject.com/en/1.10/ref/django-admin/#cmdoption-test-keepdb)

            在 Django 1.9+ 中,如果您有一个多核处理器,另一个不错的选择是 flag:

            --parallel
            

            这需要您 pip install tblib 但可以让您在多个内核上同时运行单元测试。 (https://docs.djangoproject.com/en/1.10/ref/django-admin/#cmdoption-test-parallel)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-02-19
              • 1970-01-01
              • 2017-09-14
              • 2015-03-12
              相关资源
              最近更新 更多