Как протестировать несколько сайтов в проекте django с использованием структуры сайтов / нескольких настроек

У меня есть проект, который использует базу данных для многих приложений wsgi (фреймворк сайтов от contrib активно используется). Каждое приложение wsgi имеет собственный модуль в каталоге проекта со своим собственным файлом settings.py, который расширяет global_settings.py в основном каталоге проекта (каждый файл настроек просто импортирует * из global_settings). Также некоторые сайты имеют свои собственные URL-адреса и дополнительные представления / шаблоны, которые нельзя протестировать глобально. Однако все сайты используют большинство приложений. Также из-за настройки представлений (подклассов представлений cbl) мне нужно тестировать каждый сайт отдельно. Django ожидает tests.py только в каталогах приложений, поэтому я не могу выдать:

./manage.py test first_site --settings=first_site.settings

поскольку first_site - это просто модуль Python, а не приложение Django. Как я могу это преодолеть?


person pielgrzym    schedule 23.09.2012    source источник


Ответы (2)


Я только начинаю многосайтовое тестирование и пока придумал примитивное решение:

from django.test import override_settings

@override_settings(SITE_ID=1)
def test_multisite_one(self):
    from django.contrib.sites.models import Site
    self.assertEqual(1, Site.objects.get_current().id)
person yentsun    schedule 31.03.2015

Я нашел это: http://pypi.python.org/pypi/django-discover-runner

После установки django-discover-runner (например, в pip):

pip install -U django-discover-runner

Вам просто нужно добавить одну строку в пользовательские настройки сайта:

TEST_RUNNER = 'discover_runner.DiscoverRunner'

и эта команда будет запускать тесты из обычного модуля Python с именем first_site

./manage.py test first_site --settings=first_site.settings

Выглядит вполне законно.

person pielgrzym    schedule 23.09.2012