Как я могу запустить модульные тесты django (через manage.py) быстрее

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

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

5 ответов


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

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


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

документация и разработчик комментария


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


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


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