【问题标题】:How to run tests in parallel in Django?如何在 Django 中并行运行测试?
【发布时间】:2011-03-14 20:03:16
【问题描述】:

在我的 Django 项目中,我使用 sqlite 数据库来运行测试。由于它只使用内存,它比 MySQL 快得多,但仍然不够快。在测试过程中,只使用了 4 个处理器中的一个,并且消耗的内存不多。所以,我想在内存中有 4 个 sqlite 数据库来并行运行 4 个测试。

有人试过吗?

【问题讨论】:

  • 如果您不在生产环境中使用 sqlite,我不一定建议您使用 sqlite 进行测试。通常不建议这样做,我发现通常测试可能会在 sqllite 中通过,但不能在 postgres 中通过。

标签: django testing parallel-processing


【解决方案1】:

从 Django 1.9 开始,Django 可以使用其内置的单元测试功能并行运行测试。

Django 文档:https://docs.djangoproject.com/en/3.0/ref/django-admin/#cmdoption-test-parallel

【讨论】:

    【解决方案2】:

    您可以使用此处描述的 Django 和 Twisted 并行测试运行程序:http://www.tomaz.me/2011/04/03/making-django-and-twisted-tests-faster.html(源代码位于此处https://github.com/Kami/parallel-django-and-twisted-test-runner - 链接在帖子末尾)。您可以按照 Django docs on testing 中的说明使用它。

    还有一个鼻子平行测试运行器。

    【讨论】:

      【解决方案3】:

      根据 Django 3.0 documentation,您可以使用 --parallel 选项。

      --平行[N] 在单独的并行进程中运行测试。由于现代处理器具有多个内核,因此可以显着加快运行测试的速度。

      因此您可以使用以下命令并行执行测试。

      python manage.py test --parallel
      

      您可以通过提供选项值来调整进程数,例如--parallel=4,或通过设置 DJANGO_TEST_PROCESSES 环境变量。

      如果您有一个包含大量测试单元用例的大型 Django 项目,这可以大大减少您的测试执行时间。

      【讨论】:

        【解决方案4】:

        您可以通过以下方式轻松拆分 linux 上并行应用程序的测试:

        $ python manage.py test cms & \
        python manage.py test blog & \
        python manage.py test store & \
        python manage.py test registration
        $ 
        

        对于包含大量应用程序的大型项目可能会有所帮助,最好是每四个应用程序运行一次测试的 bash 脚本。

        【讨论】:

        • 不起作用。后台测试的行为很奇怪,其中一些停止工作。此外,即使它们确实有效,输出也会被打乱(不是大问题)。最后,大多数应用程序完成速度很快,而只有两个处理器最终处理两个繁重的应用程序......
        • 我很奇怪后台测试的行为很奇怪,你有更多关于这个问题的数据吗?我看到您想要以某种方式通过测试分发负载测试......有趣,不幸的是我不清楚如何解决您的需求。如果您发现一些有趣的事情要做,请保持此问题更新。
        • 您可以尝试使用 Python 的处理库来并行运行测试并捕获输出。此外,您可能希望为每个数据库使用单独的 sqlite db(通过 --settings 定义)以避免上述猴子业务。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-22
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        • 2018-09-29
        相关资源
        最近更新 更多