Codeception с Selenium в Docker-контейнере не может увидеть сайт для его тестирования - PullRequest
0 голосов
/ 03 июля 2018

Мой сайт работает в стеке LEMP с использованием docker-compose, все прекрасно работает.

Я следовал официальной документации для докера Selenium, мой файл композитора - их копия:

version: "3"
services:
  selenium-hub:
    image: selenium/hub:3.12.0-cobalt
    container_name: selenium-hub
    ports:
      - "4444:4444"
  chrome:
    image: selenium/node-chrome:3.12.0-cobalt
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
  firefox:
    image: selenium/node-firefox:3.12.0-cobalt
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444

Тогда я настроил кодовое восприятие точно в соответствии с документацией:

acceptance.suite.yml

actor: AcceptanceTester
modules:
    enabled:
        - WebDriver:
            url: http://172.22.1.2
            browser: chrome
        - \Helper\Acceptence

TestCest.php

...
public function tryToTest(AcceptanceTester $I)
{
    $I->amOnPage('/');
    $I->see('Homepage');
}
...

При выполнении тестов они прерывают время ожидания и терпят неудачу, говоря This site can't be reached. Контейнер Docker определенно работает и доступен через веб-браузер с помощью IP-контейнеров 172.22.1.2

Все тесты запускаются и работают, когда я использую PhpBrowser по умолчанию, поэтому кажется, что кодовое восприятие не может получить доступ к контейнеру селена селена. Любой совет по этому поводу?

EDIT ......... Добавление docker-compose для наглядности

version: "3.1"
services:

    mariadb:
      image: mariadb:10.1
      container_name: reports-mariadb
      working_dir: /application
      volumes:
        - .:/application
      environment:
        - MYSQL_ROOT_PASSWORD=reports
        - MYSQL_DATABASE=reports
        - MYSQL_USER=reports
        - MYSQL_PASSWORD=reports
      ports:
        - "8011:3306"
      networks:
        reports:
          ipv4_address: 172.22.1.3

    webserver:
      image: nginx:latest
      container_name: reports-nginx
      working_dir: /application
      volumes:
          - .:/application
          - ./dev/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8010:80"
      networks:
        reports:
          ipv4_address: 172.22.1.2

    php-fpm:
      build: dev/php-fpm
      container_name: reports-php-fpm
      working_dir: /application
      volumes:
        - .:/application
        - ./dev/php-fpm/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini
      networks:
        reports:
          ipv4_address: 172.22.1.4

networks:
  reports:
    driver: bridge
    ipam:
      config:
        - subnet: 172.22.1.0/24

1 Ответ

0 голосов
/ 03 июля 2018

После публикации вопроса он пришел ко мне ... по умолчанию он смотрит на localhost, но поскольку приложение работает внутри виртуальной сети 172.22.1.0/24, это, очевидно, другой localhost по сравнению с контейнером приложений.

Поэтому я переместил контейнеры в свой основной файл docker-compose и добавил selenium-hub в виртуальную сеть следующим образом:

version: "3.1"
services:

    mariadb:
      image: mariadb:10.1
      container_name: reports-mariadb
      working_dir: /application
      volumes:
        - .:/application
      environment:
        - MYSQL_ROOT_PASSWORD=reports
        - MYSQL_DATABASE=reports
        - MYSQL_USER=reports
        - MYSQL_PASSWORD=reports
      ports:
        - "8011:3306"
      networks:
        reports:
          ipv4_address: 172.22.1.3

    webserver:
      image: nginx:latest
      container_name: reports-nginx
      working_dir: /application
      volumes:
          - .:/application
          - ./dev/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8010:80"
      networks:
        reports:
          ipv4_address: 172.22.1.2

    php-fpm:
      build: dev/php-fpm
      container_name: reports-php-fpm
      working_dir: /application
      volumes:
        - .:/application
        - ./dev/php-fpm/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini
      networks:
        reports:
          ipv4_address: 172.22.1.4

    selenium-hub:
        image: selenium/hub:3.12.0-cobalt
        container_name: selenium-hub
        ports:
          - "4444:4444"
    chrome:
        image: selenium/node-chrome:3.12.0-cobalt
        depends_on:
          - selenium-hub
        environment:
          - HUB_HOST=selenium-hub
          - HUB_PORT=4444
    firefox:
        image: selenium/node-firefox:3.12.0-cobalt
        depends_on:
          - selenium-hub
        environment:
          - HUB_HOST=selenium-hub
          - HUB_PORT=4444

networks:
  reports:
    driver: bridge
    ipam:
      config:
        - subnet: 172.22.1.0/24

Тогда вам просто нужно сообщить Codeception, на каком хосте он работает:

actor: AcceptanceTester
modules:
    enabled:
        - WebDriver:
            url: http://172.22.1.2
            host: 172.22.1.5
            browser: chrome
        - \Helper\Acceptence
...