无法 运行 gitlab 上的 selenium pytest-ci

Unable to run selenium pytest on gitlab-ci

我有以下 .gitlab-ci yaml,带有一个测试阶段和 2 个远程浏览器服务和 docker 服务。

image: python:3.8
stages:
  - test

variables:
  BROWSER: chrome
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2


.job_template:
  before_script:
    - apt update
    - apt install -y curl docker.io 
    - docker run -d -p 80:80 nginx
    - pip3 install -r requirements.txt
  script:
    - curl http://docker
    - pytest -vs --browser=$BROWSER --local='false'

e2e:remote:chrome:
  extends: .job_template
  services:
    - selenium/standalone-chrome
    - docker:dind
  only:
    variables:
      - $BROWSER == 'chrome'

在docker服务上我是运行端口80的nginx服务器,curl http://docker命令返回nginx欢迎页面源代码,但是当涉及到pytest命令时下面的测试

from pytest import raises
from selenium.common.exceptions import NoSuchElementException


def test_query_window_is_visible(remote_browser):
    remote_browser.get('http://docker')
    #query_window = remote_browser.find_element_by_name('q')
    print(remote_browser.page_source.encode("utf-8"))
    assert query_window.is_displayed()

我正在处理以下错误:

response = {'status': 500, 'value': '{"value":{"error":"unknown error","message":"unknown error: net::ERR_NAME_NOT_RESOLVED\n (...\n#22 0x55df1954a60c \u003Cunknown>\n#23 0x55df19563c6d \u003Cunknown>\n#24 0x7fd4ebddb609 \u003Cunknown>\n"}}'}

简答

您应该将其添加到作业变量 FF_NETWORK_PER_BUILD: "true"

variables:
  FF_NETWORK_PER_BUILD: "true" # Define it here if you have many e2e test jobs.  

...

e2e:remote:chrome:
  extends: .job_template
  variables:
    FF_NETWORK_PER_BUILD: 1 # you can use "true" or 1 to enable it
  services:
    - selenium/standalone-chrome
    - docker:dind
  only:
    variables:
      - $BROWSER == 'chrome'

长答案

默认情况下,GitLab 运行器(Docker 执行程序)使用 docker network links 将服务与容器连接 运行 作业,从作业容器创建 one-to-many 关系(默认称为 build)。 您可以在官方文档 services page

中了解更多相关信息

这意味着services中定义的容器默认不能相互访问。

要使服务能够相互连接并与 build 作业连接,您应该启用 FF_NETWORK_PER_BUILD 功能标志。启用此功能标志后,GitLab runner 会为作业创建一个 docker 桥接网络,并使用它而不是链接来连接该作业中定义的容器(主 build 容器和 services 容器。 )

您可以了解更多信息here and here