Запустите тесты Django с тестами носа
Тестирование моих приложений на Python выполняется на удаленном сервере с помощью команды nosetests
, Я не могу изменить способ запуска тестов и не могу добавить к нему опции. У меня есть приложение Django с тестами, но тесты не работают должным образом.
Структура моего проекта:
project
├── README.md
├── setup.py
├── mysite
│ ├── blog
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
| | ├── ...
│ ├── db.sqlite3
│ ├── manage.py
│ ├── mysite
│ │ ├── __init__.py
│ │ ├── settings.py
| | ├── ...
команда nosetests
выполнен в project
каталог. Я хочу чтобы он правильно запускался tests.py
который имеет 2 тестовых случая Django. Я пытался создать tests
каталог в корне проекта и вызывать тесты с DiscoverRunner
):
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
test_dir = os.path.dirname(os.path.dirname(__file__)) # one level up
sys.path.insert(0, os.path.join(test_dir, 'mysite'))
class ServerTest(unittest.TestCase):
def test_runtests(self):
django.setup()
self.test_runner = DiscoverRunner(verbosity=1, interactive=True, failfast=False)
failures = self.test_runner.run_tests(['mysite'])
self.assertEqual(failures, 0)
Это работает, но проблема в том, что все тесты рассматриваются как один тест, и сервер создает неправильные отчеты.
Другое решение: если я добавлю пустое __init__.py
в project/mysite
обнаруживает нос tests.py
но тесты провалились, потому что 'Apps are not loaded yet'
что, вероятно, означает, что я должен призвать django.setup()
раньше, но я не знаю, как это сделать. Я нашел плагин для носа, который делает это, но я не могу установить плагины или изменить параметры на удаленной машине.
Любые идеи, как заставить любой из моих подходов решить проблему?
2 ответа
Прежде всего, вы должны установить и настроить django-nose
если вы еще этого не сделали:
pip install django-nose
Затем добавьте его на свой INSTALLED_APPS
:
INSTALLED_APPS = (
...
'django_nose'
)
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
Теперь для nosetests
Команда для правильного запуска, вы можете создать папку с именем tests
со следующей структурой:
project
├── mysite
│ ├── blog
│ │ ├── __init__.py
│ │ ├── models.py
| | ├── ...
│ ├── mysite
│ │ ├── __init__.py
│ │ ├── settings.py
| | ├── ...
│ ├── tests
│ │ ├── __init__.py
│ │ ├── test_a_whole_class_of_methods.py
│ │ ├── test_a_whole_view.py
│ │ ├── test_one_of_my_methods.py
│ │ ├── test_another_one_of_my_methods.py
| | ├── ...
│ ├── db.sqlite3
│ ├── manage.py
├── README.md
├── setup.py
НЕ ЗАБУДЬТЕ __init__.py
ФАЙЛ ВНУТРИ tests
FOLDER!!!
Теперь, когда вы бежите nosetests
из корня вашего проекта, он будет запускать каждый тест в tests
папка:
~ $ cd path/to/project
path/to/project $ nosetests
Поскольку вы можете добавлять файлы в корневой каталог вашего проекта, вы можете попробовать добавить setup.cfg
там файл, который будет искать нос при выполнении, и в нем укажите, где искать тесты:
# setup.cfg
[nosetests]
where=mysite/blog/
(Смотрите документацию, какие параметры вы можете указать здесь).
Я не уверен, что это сработает (возможно, команда, которая запускает nose, уже указала другой файл конфигурации для использования), но, похоже, стоит попробовать.