如何在GitLabCI中运行Selenium sind runner ?



我目前正在评估Selenium结合GitLab CI作为我们网站的测试工具。这是我当前的.gitlab-ci.yml:

variables:
GIT_STRATEGY: clone
GIT_DEPTH: 0
stages:
- tests
test:
stage: tests
image: node:latest
tags:
- linux
before_script:
- apt-get update
- apt-get install -y chromium
- npm install -g selenium-side-runner
- npm install -g chromedriver
script:
- selenium-side-runner My-UI-Test.side

我得到以下错误:

FAIL ./DefaultSuite.test.js
● Test suite failed to run
WebDriverError: unknown error: Chrome failed to start: exited abnormally.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/chromium is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
at Object.throwDecodedError (../../../../../../usr/local/lib/node_modules/selenium-side-runner/node_modules/selenium-webdriver/lib/error.js:550:15)
at parseHttpResponse (../../../../../../usr/local/lib/node_modules/selenium-side-runner/node_modules/selenium-webdriver/lib/http.js:560:13)
at Executor.execute (../../../../../../usr/local/lib/node_modules/selenium-side-runner/node_modules/selenium-webdriver/lib/http.js:486:26)

我已经搜索了错误信息DevToolsActivePort file doesn't exist,似乎Chrome不喜欢以root权限运行。许多答案建议使用--no-sandbox--disable-dev-shm-usage标志。但这些都是Chrome的标志,因为我没有直接调用Chrome,所以我不能使用它们。有问题的网站也是从一个不同的项目部署,所以我没有代码的工作。我唯一能修改的文件是My-UI-Test.side.side.yaml

我有一个单独的项目用于我的e2e测试,我在其中添加了一个Dockerfile,我的selenium .side文件以及一个配置文件.side.conf。该项目使用gitlab docker注册表将项目作为镜像上传,该镜像可以直接加载到gitlab-ci中。

这是我的e2e测试项目的文件:

  • package.json
...
"scripts": {
"test": "selenium-side-runner test.side"
},
...
"dependencies": {
"selenium-side-runner": "^3.17.0",
"chromedriver": "^101.0.0"
}

这些是我正在使用的选项,你可能想要调整一些东西在这里和那里。不过,这些功能基本上是您想要的。

我还将baseUrl键添加到该文件中,而不是直接添加到包中。json,因为我在几个环境中使用相同的图像,并更改url,我在需要时在我的before_script中替换。(我在下面省略了这一点,因为您的用例可能不同)

  • .side.yml
capabilities:
browserName: "chrome"
goog:chromeOptions:
binary: /usr/bin/google-chrome-stable
args:
- no-sandbox
- disable-dev-shm-usage
- headless
- nogpu
output-directory: results
output-format: junit
baseUrl: <baseURL>

Dockerfile可能包含一些无用的依赖,你可以删除它们。其中许多只是从我的木偶Dockerfile复制过来的,因为它们使用的google-chrome-stable二进制文件非常相似。在您的情况下,可能也不需要下载带有google-chrome-stable二进制文件的字体。所以根据你的需要调整一下。

  • Dockerfile
FROM node:14
RUN apt update
RUN apt install -y 
rsync 
grsync 
gnupg 
ca-certificates 
fonts-liberation 
libappindicator3-1 
libasound2 
libatk-bridge2.0-0 
libatk1.0-0 
libc6 
libcairo2 
libcups2 
libdbus-1-3 
libexpat1 
libfontconfig1 
libgbm1 
libgcc1 
libglib2.0-0 
libgtk-3-0 
libnspr4 
libnss3 
libpango-1.0-0 
libpangocairo-1.0-0 
libstdc++6 
libx11-6 
libx11-xcb1 
libxcb1 
libxcomposite1 
libxcursor1 
libxdamage1 
libxext6 
libxfixes3 
libxi6 
libxrandr2 
libxrender1 
libxss1 
libxtst6 
lsb-release 
wget 
xdg-utils
RUN apt-get update 
&& apt-get install -y wget gnupg 
&& wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - 
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' 
&& apt-get update 
&& apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 
--no-install-recommends 
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY package.json /app
COPY .side.yml /app
COPY test.side /app
COPY results /app
RUN npm i -g chromedriver --unsafe-perm
RUN npm i -g selenium-side-runner --unsafe-perm
RUN npm install

这里我把它包含到我的gitlab CI

  • gitlab-ci.yml:
e2e:
stage: test
image: <image-of-above-project>:1.0
variables:
GIT_STRATEGY: none
script:
- cat .side.yml
- npm run test

如果您需要更多关于容器注册表的信息,请访问这里:https://docs.gitlab.com/ee/user/packages/container_registry/

相关内容

  • 没有找到相关文章

最新更新