Как я могу запустить модульные тесты Django (через manage.py) быстрее - PullRequest
9 голосов
/ 05 марта 2009

Поскольку я разрабатываю модульные тесты для своего приложения django, я снова и снова запускаю тест manage.py. Я использую бэкэнд MySQL, и у меня в проекте много моделей, поэтому время на создание всех тестовых баз составляет около 30 секунд.

Как использовать ускорение каждого модульного теста, сохраняя созданные таблицы базы данных и просто очищая их от всех промежуточных записей команды «manage.py test»?

Ответы [ 6 ]

7 голосов
/ 06 марта 2009

Обратите внимание, что вам не нужно каждый раз запускать весь набор тестов. Вы можете просто запустить набор тестов для одного приложения, запустив manage.py test appname (или для нескольких приложений одновременно с manage.py test app1 app2 ...).

Мой обычный рабочий процесс - просто запускать тесты для приложения, над которым я работаю, во время работы, и запускать полный пакет, прежде чем я внесу свой следующий набор изменений.

4 голосов
/ 05 марта 2009

Я не пробовал, но была недавняя проверка, которая должна помочь, позволяя запускать тесты внутри транзакций, которые затем откатываются:

Документация и Комментарий разработчика

1 голос
/ 10 октября 2018

Вы можете предотвратить разрушение вашей тестовой БД между тестовыми прогонами в Django 1.8+, используя флаг:

--keepdb

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

В Django 1.9+, если у вас многоядерный процессор, другой замечательный вариант - флаг:

--parallel

Это требует от вас установки pb tblib, но позволит вам запускать свои модульные тесты одновременно на нескольких ядрах. (https://docs.djangoproject.com/en/1.10/ref/django-admin/#cmdoption-test-parallel)

1 голос
/ 25 января 2011

Я использую ram-диск для своей базы данных MySQL, fast даже не описывает его, в сочетании с тестированием только конкретного теста в конкретном приложении, над которым вы работаете, это может значительно сократить время тестирования. Есть несколько сценариев, которые будут автоматизировать создание ramdisk для вашей базы данных, я использую mysql-ramdisk.py , который подготовил один из моих коллег, эта версия для Mac OS X. также версия для Linux здесь . У меня уходит около 30 секунд, чтобы настроить все для django dev, и мои тесты иногда выполняются менее чем за пять секунд, включая создание тестовой базы данных по умолчанию. ;)

1 голос
/ 29 июня 2009

Вы можете запустить свои тесты, используя базу данных sqlite. Он не подходит для полного теста (поскольку БД отличается), но для проверки работоспособности это экономит много времени. Смотри: http://mindlesstechnology.wordpress.com/2008/08/16/faster-django-unit-tests/

0 голосов
/ 03 сентября 2011

Как указано в этой теме: Как запустить модульный тест для производственной базы данных? , я создаю набор тестов, который может работать как с производственной базой данных (на моей локальной машине разработчика через " manage.py shell "), или обычный набор тестов django" manage.py test ". Это позволило мне сэкономить время, поскольку я быстро выполнял проверку работоспособности и проверял время во время разработки. В любом случае я использую тот же самый db (MySQL) и получаю django ORM в своих тестах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...