Django Unit Testing demorando muito tempo para criar banco de dados de teste

Há algum tempo, meu teste de unidade está demorando mais que o esperado. Eu tentei depurá-lo algumas vezes sem muito sucesso, pois os atrasos são antes dos meus testes começarem a ser executados. Isso afetou minha capacidade de fazer qualquer coisa remotamente próxima do desenvolvimento orientado a testes (talvez minhas expectativas sejam muito altas), por isso quero ver se consigo consertar isso de uma vez por todas.

Quando um teste é executado, existe um atraso de 70 a 80 segundos entre o início e o início real do teste. Por exemplo, se eu executar um teste para um módulo pequeno (usandotime python manage.py test myapp), Eu recebo

<... 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.4,00s

Cerca de 1m18 do 1m: 21 estão entre os

Creating test database for alias 'default'...

e a

.......

linha. Em outras palavras, o teste leva menos de 3 segundos, mas a inicialização do banco de dados parece demorar 1: 18min

Eu tenho cerca de 30 aplicativos, a maioria com 1 a 3 modelos de banco de dados, portanto, isso deve dar uma idéia do tamanho do projeto. Eu uso o SQLite para testes de unidade e implementamos algumas das melhorias sugeridas. Não consigo postar meu arquivo de configuração inteiro, mas fico feliz em adicionar qualquer informação necessária.

Eu uso um corredor

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)

e nas minhas configurações:

TEST_RUNNER = 'config.test_runner.ExcludeAppsTestSuiteRunner'

Eu também tentei usardjango-nose comdjango-nose-exclude

Eu já li bastante sobre como acelerar o teste, mas não encontrei pistas sobre como otimizar ou evitar a inicialização do banco de dados. Vi as sugestões sobre como tentar não testar com o banco de dados, mas não posso ou não sei como evitá-lo completamente.

Por favor me avise se

Isso é normal e esperadoNão é esperado (e, esperamos, uma correção ou orientação sobre o que fazer)

Mais uma vez, não preciso de ajuda para acelerar o teste, mas a inicialização (ou sobrecarga). Eu quero que o exemplo acima leve 10s em vez de 80s.

Muito Obrigado

Eu executo o teste (para aplicativo único) com--verbose 3 e descobriu que tudo isso está relacionado a migrações:

  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

Eu esmaguei todas as minhas migrações, mas ainda lento.

questionAnswers(4)

yourAnswerToTheQuestion