Итак, я пытался написать функциональные тесты для моего приложения django, и у меня, похоже, странное поведение: каждый раз, когда я запускаю свои тесты, Selenium зависает на неопределенное время после первого теста, только когда я перезагружаю концентратор иКонтейнеры узла позволяют мне выполнить еще один тест, после чего он снова зависает навсегда.Я изучил этот поток , так как на первый взгляд кажется, что это та же самая ошибка, но даже с этими изменениями у меня та же проблема.
Описание моей настройки: я использую docker-compose с 3 (основными) сервисами: django, selenium_hub и selenium_firefox.Найдите мой docker-compose.yml ниже:
version: '3'
services:
web:
build:
context: django
dockerfile: Dockerfile
stdin_open: true
tty: true
volumes:
- ./django/my_web:/src/my_web/
ports:
- "8000:8000"
networks: ["my-net"]
nginx:
image: nginx
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
- ./nginx/static:/usr/share/nginx/djangodocker/static
- ./nginx/certs/:/etc/nginx/conf.d/certs:ro
ports:
- "80:80"
- "443:443"
depends_on:
- web
networks: ["my-net"]
selenium_hub:
container_name: selenium_hub
image: selenium/hub
volumes:
- /dev/shm:/dev/shm
environment:
- DBUS_SESSION_BUS_ADDRESS=/dev/null
shm_size: 512MB
ports:
- "4444:4444"
networks: ["my-net"]
selenium_firefox:
container_name: selenium_firefox
image: selenium/node-firefox-debug
volumes:
- /dev/shm:/dev/shm
shm_size: 512MB
environment:
- DBUS_SESSION_BUS_ADDRESS=/dev/null
- HUB_PORT_4444_TCP_ADDR=selenium_hub
- HUB_PORT_4444_TCP_PORT=4444
ports:
- "5901:5900"
depends_on:
- selenium_hub
networks: ["my-net"]
networks:
my-net:
Как вы можете видеть, я пытался смонтировать / dev / shm, установить shm_size и установить переменную окружения: DBUS_SESSION_BUS_ADDRESS = / dev / null безрезультатно.
Я думаю, что причина моей проблемы может заключаться в самом тесте, поэтому я включил следующий код:
from django.test import TestCase
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class SeleniumTest(TestCase):
def setUp(self):
print('Setting up...')
self.firefox = webdriver.Remote(
command_executor='http://selenium_hub:4444/wd/hub',
desired_capabilities=DesiredCapabilities.FIREFOX
)
print('Done; connected')
def test_visit_site_with_firefox(self):
selenium = self.firefox
selenium.get('http://web:8000')
assert "Home" in selenium.title
self.firefox.quit()
.... more tests below...
Тем не менее, когда я запускаю manage.py test --verbosity=2
, я получаю результат первогоtest, затем он зависает после строки print("Setting up...")
, и я ждал до 40 минут без какого-либо сообщения об ошибке.
Мне было интересно, заметил ли кто-либо подобное поведение в Selenium, используя :latest
тег для всех изображений в докер версии 18.06.1-ce и docker-compose версии 1.22.0.