Запуск тестов django с селеном в докере

Для выполнения тестов я обычно запускаю отдельный контейнер с:

docker-compose run --rm web /bin/bash 

Где сеть – контейнер с джанго. Из оболочки я выполняю py.test время от времени.

Чтобы иметь возможность достичь селена из контейнера с помощью django и позволить браузеру из контейнера селена достичь сервера жизни django, я решил использовать параметр «net», который позволяет контейнерам делиться сетью. Поэтому я добавил его в yml:

 selenium: image: selenium/standalone-firefox net: "container:web" 

К сожалению, это не работает. Я не вижу порт 4444 в контейнере django.

Он работает только в том случае, если вместо net:"container:web" я указываю имя автогенерируемого контейнера, например net:"container:project_web_run_1" .

Также я попытался вместо docker-compose run --rm .... использовать docker-compose up --no-deps изменить параметр command в py.test functional_tests но это тоже не сработало.

Является ли это правом использовать селен с контейнерами?

2 Solutions collect form web for “Запуск тестов django с селеном в докере”

Вот как я это делаю. Основная проблема заключается в том, что запуск docker-compose будет генерировать другое имя хоста (project_container_run_x), где x трудно понять. В итоге я просто ушел от ip-адреса. Я также гарантирую, что DEBUG является ложным, иначе я получаю плохую просьбу.

Я использую StaticLiveServerTestCase следующим образом:

 import os import socket os.environ['DJANGO_LIVE_TEST_SERVER_ADDRESS'] = '0.0.0.0:8000' class IntegrationTests(StaticLiveServerTestCase): live_server_url = 'http://{}:8000'.format( socket.gethostbyname(socket.gethostname()) ) def setUp(self): settings.DEBUG = True self.browser = webdriver.Remote( command_executor="http://selenium:4444/wd/hub", desired_capabilities=DesiredCapabilities.CHROME ) def tearDown(self): self.browser.quit() super().tearDown() def test_home(self): self.browser.get(self.live_server_url) 

Мой файл для создания докеров имеет это для селена и расширяет веб-контейнер (где работает django). Порт 5900 открыт для VNC. Мне нравится держать это изолированным в чем-то вроде docker-compose.selenium.yml

 version: '2' services: web: environment: SELENIUM_HOST: http://selenium:4444/wd/hub TEST_SELENIUM: 'yes' depends_on: - selenium selenium: image: selenium/standalone-chrome-debug ports: - "5900:5900" - version: '2' services: web: environment: SELENIUM_HOST: http://selenium:4444/wd/hub TEST_SELENIUM: 'yes' depends_on: - selenium selenium: image: selenium/standalone-chrome-debug ports: - "5900:5900" 

Я могу запускать тесты вроде

 docker-compose run --rm web ./manage.py test 

Таким образом, мой веб-контейнер получает доступ к селену через хост «селен». Затем Selenium обращается к веб-контейнеру по ip-адресу, который определяется «на лету».

Еще одна проблема заключается в том, что заманчиво просто использовать «сеть» в качестве имени хоста. Если ваша команда запуска команды docker запускает отдельный веб-контейнер – это будет работать. Однако он не будет использовать вашу тестовую базу данных, что сделало бы ее отличным испытанием.

Я только что указал host='web' для LiveServerTestCase . Вот мое рабочее решение.

test.py

 from django.test import LiveServerTestCase from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities class FunctionalTestCase(LiveServerTestCase): host = 'web' def setUp(self): self.browser = webdriver.Remote( command_executor="http://selenium:4444/wd/hub", desired_capabilities=DesiredCapabilities.FIREFOX ) def test_user_registration(self): self.browser.get(self.live_server_url) self.assertIn('Django', self.browser.title) def tearDown(self): self.browser.close() 

docker-compose.yml

 version: '3' services: db: image: postgres web: build: . ports: - "8000:8000" depends_on: - db - selenium selenium: image: selenium/standalone-firefox - version: '3' services: db: image: postgres web: build: . ports: - "8000:8000" depends_on: - db - selenium selenium: image: selenium/standalone-firefox 
  • Управление ключами отправки + щелчок в Selenium с привязками Python
  • Python Selenium не запускает событие Javascript
  • Информация о заполнении формы селена python
  • Автоматические скриншоты при неудаче теста Selenium Webdriver в Python
  • Как посмотреть сеанс xvfb, находящийся внутри докера на удаленном сервере, из моего локального браузера?
  • Установите chrome.prefs с привязкой python для селена в chromedriver
  • Ошибка «Разрешить отказ» разрушает Selenium scraping
  • Селен подождать, пока не появится какой-либо элемент с заданным классом
  • Ошибка: тип объекта «Ключи» не имеет атрибута «chord»
  • Получить все ссылки href с использованием селена в python
  • Испытания селена после первого теста
  •  
    Interesting Posts for Van-Lav

    Как проверить и отменить задачи Сельдерея по имени задачи

    переводить url с помощью google translate из скрипта python

    Django: openpyxl сохраняет книгу как вложение

    Как определить рекурсивную функцию для объединения двух отсортированных списков и возврата нового списка с возрастающим порядком в Python?

    EXIF как вещь для видео

    У списков Python есть эквивалент dict.get?

    Приближение замкнутой кривой к множеству точек

    Python networkx и настойчивость (возможно, в neo4j)

    Как использовать sklearn fit_transform с pandas и вернуть dataframe вместо numpy массива?

    итерация по строкам unicode и сравнение с unicode в словаре python

    Вызов метода класса из другого метода класса в Python 2.7

    Pandon pandas: объединить два фрейма данных по индексу даты и общее значение столбца

    Многопроцессорный Python.Pool с процессами, сбой

    Преобразует ли enumerate () объект-генератор?

    Ошибка Python3: TypeError: Невозможно преобразовать объект 'bytes' в str неявно

    Python - лучший язык программирования в мире.