Передача IP-адреса контейнера selenium docker в сценарий ruby cucumber - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь поместить тест ruby Cucumber в Docker. Я использую файл docker -compose.yml для запуска контейнера концентратора селена вместе с узлами chrome и firefox. Затем я создаю образ на основе alpine ruby с моими тестами.

Я заставил процесс работать, однако он включает в себя поиск IP-адреса контейнера концентратора каждый раз, когда он создается, а затем жесткое кодирование IP в мой файл env.rb, где я подключаюсь к сетке Selenium.

Я видел, что связанные контейнеры могут быть подключены с использованием имени, но мне не очень повезло. Есть ли способ легко передать IP-адрес контейнера концентратора в контейнер моего теста?

Вот мой yml-файл:

version: "3"
services:

  hub:
    image: selenium/hub
    ports:
      - "4444:4444"

    environment:
      GRID_MAX_SESSION: 16
      GRID_BROWSER_TIMEOUT: 3000
      GRID_TIMEOUT: 3000

  chrome:
    image: selenium/node-chrome
    container_name: web-automation_chrome
    depends_on:
      - hub
    environment:
      HUB_PORT_4444_TCP_ADDR: hub
      HUB_PORT_4444_TCP_PORT: 4444
      NODE_MAX_SESSION: 4
      NODE_MAX_INSTANCES: 4
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "9001:5900"
    links:
      - hub

  firefox:
    image: selenium/node-firefox
    container_name: web-automation_firefox
    depends_on:
      - hub
    environment:
      HUB_PORT_4444_TCP_ADDR: hub
      HUB_PORT_4444_TCP_PORT: 4444
      NODE_MAX_SESSION: 2
      NODE_MAX_INSTANCES: 2
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "9002:5900"
    links:
      - hub

  myapp:
    build: .
    image: justinpshields/myapp
    depends_on:
      - hub
    environment:
      URL: hub
    links:
      - hub

networks:
  default:

1 Ответ

0 голосов
/ 05 августа 2020

links бесполезно. Каждый контейнер в docker-compose.yml использует одну и ту же сеть, если не указано иное.

Вам также следует дождаться запуска хаба селена и присоединить его контейнеры браузеров.

Например, с этим:

while ! curl -sSL "http://$SELENIUMHUBHOST:4444/status" 2>&1 | grep "\"ready\": true" >/dev/null; do
  echo 'Waiting for the Grid'
  sleep 1
done
while ! curl -sSL "http://$SELENIUMHUBHOST:4444/status" 2>&1 | grep "\"browserName\": \"$BROWSER\"" >/dev/null; do
  echo "Waiting for the node $BROWSER"
  sleep 1
done

...