Имя хоста Django в тестировании - PullRequest
0 голосов
/ 07 ноября 2019

Мне интересно, есть ли способ получить имя хоста приложения Django при запуске тестов. То есть я бы хотел, чтобы тесты проходили как локально, так и при запуске на промежуточном сервере. Следовательно, необходимо знать http://localhost:<port> против http://staging.example.com, потому что некоторые тесты запрашивают определенные URL-адреса.

Я нашел ответы о том, как это сделать внутри шаблонов, но это не помогает, поскольку нет response объект для проверки имени хоста.

Как узнать имя хоста вне представлений / шаблонов? Это где-то хранится в настройках Django?

1 Ответ

1 голос
/ 07 ноября 2019

Зачем вам нужно знать имя хоста? Тесты могут работать без проблем, если вы используете тестовый клиент. Вам не нужно ничего знать о системе, в которой они работают.

Вы также можете пометить тесты тегом, а затем запустить систему CI, включающую этот тег.

Инаконец, есть LiveServerTestCase :

LiveServerTestCase в основном аналогичен TransactionTestCase с одной дополнительной функцией: он запускает живой сервер Django в фоновом режиме при настройке и выключает егосрывать. Это позволяет использовать автоматические тестовые клиенты, отличные от фиктивного клиента Django, такие как, например, клиент Selenium, для выполнения серии функциональных тестов внутри браузера и имитации действий реального пользователя.

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

Дополнительная информация из комментариев:

  • Вы можете проверить, присутствует ли URL файла изображения вВаш ответ путем тестирования MEDIA_URL: self.assertContains(response, f'{settings.MEDIA_URL}/default-avatar.svg')
  • Вы можете проверить наличие загрузки различными способами, но самый простой из них - проверить, существует ли файловый объект, связанный с FileField . Он выбросит ValueError, если его нет.
...