Selenium Grid в Python - тайм-аут функциональных тестов после каждого первого теста - PullRequest
0 голосов
/ 05 октября 2018

Итак, я пытался написать функциональные тесты для моего приложения 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.

1 Ответ

0 голосов
/ 03 декабря 2018

Я сам решил это.Это было действительно просто, мне просто нужна была функция tearDown() в моем классе TestCase, который вышел из Selenium, чтобы позволить ему перейти к следующему тестовому сценарию.

Надеюсь, это кому-нибудь поможет!

...