【问题标题】:How to run selenium+pytest in docker?如何在 docker 中运行 selenium+pytest?
【发布时间】:2021-08-26 06:52:24
【问题描述】:

我是使用 docker 的新手,所以尝试在其中运行我的 selenium 测试时遇到问题。 我知道我需要使用网格或独立运行 selenium 服务器并且它工作正常,但是我如何通过 docker (docker run mytest:1.0) 运行我的测试?我不断收到诸如“urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=4444): Max retries exceeded with url: /wd/hub/session”之类的错误,但如果我在本地运行我的测试机器 - 它工作正常。

Dockerfile:

FROM python:3.8
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . /tests
WORKDIR /tests
CMD [ "pytest", "-vv", "-s", "test_selenium.py" ]

Docker-compose.yaml:

version: "3"
services:
  chrome:
    image: selenium/node-chrome:4.0.0-rc-1-prerelease-20210823
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
    ports:
      - "7900:7900"

  selenium-hub:
    image: selenium/hub:4.0.0-rc-1-prerelease-20210823
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"

我在 test_file 中的驱动初始化:

driver = webdriver.Remote('http://localhost:4444/wd/hub', desired_capabilities=DesiredCapabilities.CHROME)

【问题讨论】:

  • 那么您是否尝试从容器内部运行测试?
  • 是的,完全正确。我已经为standalone-chrome 运行了容器,我想在其中运行我的测试
  • 你可以试试这个 - gist.github.com/madhank93/… 吗?
  • 仍然拒绝连接。我认为这是与端口有关的东西,但我还不够好,无法弄清楚
  • 您可以将测试指向http://selenium:4444/wd/hub。但无论如何,你得到了它的工作。

标签: python-3.x docker selenium docker-compose


【解决方案1】:

所以我找到了答案,我想分享它。 您的 docker-compose.yaml 应该只启动 selenium 服务器和与您要在服务器上启动的浏览器相同的节点。

version: '3'
services:
  chrome:
    image: selenium/node-chrome:latest
    shm_size: 2gb
    networks:
      - selenium
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
    ports:
      - '7900:7900'

  selenium-hub:
    image: selenium/hub:latest
    container_name: selenium-hub
    networks:
      - selenium
    ports:
      - '4442:4442'
      - '4443:4443'
      - '4444:4444'

networks:
  selenium:
    name: selenium

您在 test_ 文件中的驱动程序初始化应如下所示:

driver = webdriver.Remote('http://localhost:4444/wd/hub', desired_capabilities=DesiredCapabilities.CHROME)

Dockerfile 没问题。

那么你需要什么:

  1. 码头工人组成
  2. docker run --network "host" selenium_test:1.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-13
    • 2020-01-26
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多