Django LiveServerTestCase всегда сбой из-за конфликта адресов... Несмотря на отсутствие адреса
В настоящее время я работаю над очисткой своих функциональных тестов Django, чтобы использовать LiveServerTestCase, а не отскакивать тесты на основе селена с экземпляра среды разработки, работающей в фоновом режиме, и я ударил стену. Каждый раз, когда я пытаюсь запустить тест LiveServerTestCase, я получаю следующую ошибку:
======================================================================
ERROR: setUpClass (fun_tests.tests.backend.TestCmsLogin)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/Documents/env/local/lib/python2.7/site-packages/django/test/testcases.py", line 1187, in setUpClass
raise cls.server_thread.error
error: [Errno 98] Address already in use
Супер удовольствие, учитывая sudo netstat -netp | grep 8081
ничего не дает. Некоторые предпосылки: я использую Django 1.6, и я использую нос, джанго-нос, нос-исключаю, но я эффективно рубил их, чтобы помочь диагностировать проблему. Код, который я использую, прост:
from django.test import LiveServerTestCase
class TestCmsLogin(LiveServerTestCase):
def test_a_test_itself(self):
self.assertTrue(True)
Я не могу найти какой-либо предшествующий уровень техники по этому вопросу, а Djangoproject-трекер ошибок чист. Что мне не хватает?
Изменить: сегодня утром проблема невоспроизводима, независимо от того, что флаг 8081 был открытым, больше не вызывает проблем.
edit2: Mistyped 8081 as 8082 в моей записи, исправлено (и проверено, чтобы убедиться, что у меня это было в тот момент).
Ответы
Ответ 1
Вы можете установить (в settings.py) переменную окружения DJANGO_LIVE_TEST_SERVER_ADDRESS
для включения нескольких диапазонов портов, которые будут предприняты:
os.environ['DJANGO_LIVE_TEST_SERVER_ADDRESS']="localhost:8000-8010,8080,9200-9300"
У той же самой проблемы, возможно, это помогает кому-то выйти.
Ответ 2
Это началось со мной при выполнении последующих тестов после того, как предыдущая из них вызвала ошибку внутреннего сервера. На mac используйте lsof, чтобы найти программу, используя порт, и убейте ее. Например:.
$ sudo lsof -i :8081
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox-b 1097 username 3u IPv4 0x94495559c6dea35 0t0 TCP localhost:sunproxyadmin (LISTEN)
$ kill -9 1097
Ответ 3
Если переменная среды DJANGO_LIVE_TEST_SERVER_ADDRESS не установлена, адрес по умолчанию для запуска сервера тестового тестирования - localhost: 8081. См. Код svc LiveServerTestCase.
# Launch the live server thread
specified_address = os.environ.get(
'DJANGO_LIVE_TEST_SERVER_ADDRESS', 'localhost:8081')
Поскольку ОС, похоже, жалуется на используемый порт 8081. Можно быстро выбрать другой порт (скажем, 9000), выполнив тесты, как показано ниже.
/manage.py test functional_tests --liveserver :9000
Однако явная настройка DJANGO_LIVE_TEST_SERVER_ADDRESS была бы идеальной.
export DJANGO_LIVE_TEST_SERVER_ADDRESS="localhost:9000"
Ответ 4
Измените свой метод teardown, если вы собираетесь отделить свои тестовые примеры
Тестирование в одном файле в порядке использования метода .close()
def tearDown(self):
self.browser.close()
Тестирование в нескольких файлах потребует запуска новых потоков.
def tearDown(self):
self.browser.quit()