Django单元测试需要很长时间才能创建测试数据库

dkarchmer:

现在一段时间以来,我的单元测试花费的时间比预期的长。我已经尝试调试了几次,但是没有成功,因为延迟甚至在我的测试开始之前就已开始。这影响了我在远程测试驱动开发附近做任何事情的能力(也许我的期望太高了),所以我想看看我是否可以一劳永逸地解决这个问题。

运行测试时,在测试开始和实际开始之间会有70到80秒的延迟。例如,如果我对一个小模块进行测试(使用time python manage.py test myapp),我得到

<... bunch of unimportant print messages I print from my settings>

Creating test database for alias 'default'...
......
----------------------------------------------------------------
Ran 6 tests in 2.161s

OK
Destroying test database for alias 'default'...

real    1m21.612s
user    1m17.170s
sys     0m1.400s

1m:21中的大约1m18位于

Creating test database for alias 'default'...

.......

线。换句话说,测试耗时不到3秒,但是数据库初始化似乎花费了1:18分钟

我大约有30个应用程序,大多数应用程序具有1到3个数据库模型,因此这应该可以使您了解项目规模。我使用SQLite进行单元测试,并实现了一些建议的改进。我无法发布整个设置文件,但很高兴添加所需的任何信息。

我确实使用亚军

from django.test.runner import DiscoverRunner
from django.conf import settings

class ExcludeAppsTestSuiteRunner(DiscoverRunner):
    """Override the default django 'test' command, exclude from testing
    apps which we know will fail."""

    def run_tests(self, test_labels, extra_tests=None, **kwargs):
        if not test_labels:
            # No appnames specified on the command line, so we run all
            # tests, but remove those which we know are troublesome.
            test_labels = (
                'app1',
                'app2',
                ....
                )
            print ('Testing: ' + str(test_labels))

        return super(ExcludeAppsTestSuiteRunner, self).run_tests(
                test_labels, extra_tests, **kwargs)

在我的设置中:

TEST_RUNNER = 'config.test_runner.ExcludeAppsTestSuiteRunner'

我也尝试过django-nosedjango-nose-exclude

我已经阅读了很多有关如何加快测试速度的文章,但是还没有找到有关如何优化或避免数据库初始化的线索。我已经看到了有关不尝试使用数据库进行测试的建议,但是我无法或不知道如何完全避免这种情况。

请让我知道

  1. 这是正常现象
  2. 没料到(希望能做些修补或引导)

再说一次,我不需要帮助自己加快测试速度,而是需要初始化(或开销)。我希望上面的示例花费10秒而不是80秒。

非常感谢

我使用来运行测试(针对单个应用程序),--verbose 3发现这与迁移有关:

  Rendering model states... DONE (40.500s)
  Applying authentication.0001_initial... OK (0.005s)
  Applying account.0001_initial... OK (0.022s)
  Applying account.0002_email_max_length... OK (0.016s)
  Applying contenttypes.0001_initial... OK (0.024s)
  Applying contenttypes.0002_remove_content_type_name... OK (0.048s)
  Applying s3video.0001_initial... OK (0.021s)
  Applying s3picture.0001_initial... OK (0.052s)
  ... Many more like this

我压缩了所有的迁移,但仍然很慢。

dkarchmer:

解决我的问题的最终解决方案是强制Django在测试过程中禁用迁移,这可以通过如下设置完成

TESTING = 'test' in sys.argv[1:]
if TESTING:
    print('=========================')
    print('In TEST Mode - Disableling Migrations')
    print('=========================')

    class DisableMigrations(object):

        def __contains__(self, item):
            return True

        def __getitem__(self, item):
            return "notmigrations"

    MIGRATION_MODULES = DisableMigrations()

或使用https://pypi.python.org/pypi/django-test-without-migrations

我的整个测试现在大约需要1分钟,而一个小应用程序则需要5秒。

就我而言,在迁移时更新测试时不需要进行迁移,并且不使用迁移来添加数据。这并不适合所有人

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

@QuarkusTest 单元测试需要很长时间

来自分类Dev

Django测试需要很长时间才能开始

来自分类Dev

单元测试数据库调用

来自分类Dev

Laradock单元测试数据库错误PDOException

来自分类Dev

rspec rails:单元测试数据库查询

来自分类Dev

普通python中类似Django的单元测试数据库

来自分类Dev

Django测试数据库需要启用Postgres Extension

来自分类Dev

firebase实时数据库需要很长时间才能加载数据

来自分类PHP

如何使用Doctrine Fixture加载测试数据库以进行PHP单元测试?

来自分类Dev

在单元测试清除期间删除测试数据库

来自分类Dev

symfony中的单元测试实体何时使用测试数据库?

来自分类Dev

创建测试数据库时出错:Django unittest

来自分类Dev

无法创建Django测试数据库

来自分类Dev

Django未正确创建测试数据库

来自分类Dev

无法创建测试数据库 django

来自分类Dev

Django 没有创建测试数据库

来自分类Dev

使用大型数据库时,Ajax请求需要很长时间才能完成

来自分类Dev

Azure SQL DB托管实例上的数据库创建/删除时间需要很长时间

来自分类Dev

Azure DevOps Server:为什么Visual Studio测试步骤需要这么长时间才能运行单元测试?

来自分类Dev

将SQLite设置为Laravel 5.1中的单元测试数据库

来自分类Dev

Django单元测试:分离单元测试而无需多次查询数据库

来自分类Dev

在Django单元测试中查询数据库

来自分类Dev

如何对Django数据库迁移进行单元测试?

来自分类Dev

Django单元测试等待数据库

来自分类Dev

没有数据库的Django单元测试

来自分类Dev

Django需要很长时间才能加载

来自分类Dev

在MySQL数据库中查询需要很长时间

来自分类Dev

Laravel数据库MySQL查询需要很长时间

来自分类Dev

DB2 创建数据库需要很长时间

Related 相关文章

  1. 1

    @QuarkusTest 单元测试需要很长时间

  2. 2

    Django测试需要很长时间才能开始

  3. 3

    单元测试数据库调用

  4. 4

    Laradock单元测试数据库错误PDOException

  5. 5

    rspec rails:单元测试数据库查询

  6. 6

    普通python中类似Django的单元测试数据库

  7. 7

    Django测试数据库需要启用Postgres Extension

  8. 8

    firebase实时数据库需要很长时间才能加载数据

  9. 9

    如何使用Doctrine Fixture加载测试数据库以进行PHP单元测试?

  10. 10

    在单元测试清除期间删除测试数据库

  11. 11

    symfony中的单元测试实体何时使用测试数据库?

  12. 12

    创建测试数据库时出错:Django unittest

  13. 13

    无法创建Django测试数据库

  14. 14

    Django未正确创建测试数据库

  15. 15

    无法创建测试数据库 django

  16. 16

    Django 没有创建测试数据库

  17. 17

    使用大型数据库时,Ajax请求需要很长时间才能完成

  18. 18

    Azure SQL DB托管实例上的数据库创建/删除时间需要很长时间

  19. 19

    Azure DevOps Server:为什么Visual Studio测试步骤需要这么长时间才能运行单元测试?

  20. 20

    将SQLite设置为Laravel 5.1中的单元测试数据库

  21. 21

    Django单元测试:分离单元测试而无需多次查询数据库

  22. 22

    在Django单元测试中查询数据库

  23. 23

    如何对Django数据库迁移进行单元测试?

  24. 24

    Django单元测试等待数据库

  25. 25

    没有数据库的Django单元测试

  26. 26

    Django需要很长时间才能加载

  27. 27

    在MySQL数据库中查询需要很长时间

  28. 28

    Laravel数据库MySQL查询需要很长时间

  29. 29

    DB2 创建数据库需要很长时间

热门标签

归档