无法 运行 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
容器。 )
我有以下 .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
容器。 )