通过 Jenkins CI 在 Docker 容器中进行 运行 Selenium 测试的最简单方法

Easiest way to run Selenium tests in a Docker container over Jenkins CI

我想在 Docker 容器中的 Jenkins CI 上执行用 Nightwatch-Cucumber 编写的自动化测试。我有一张 Docker 图片,我想用它。

这是我想做的更详细的事情。

  1. 开始对 Jenkins CI 作业进行测试
  2. 在同一台机器上加载 Docker 图像,相关的 Docker 容器将启动。此容器基于 Unix OS。此外,Docker容器中的一些配置将被执行。
  3. 测试将通过 xvfb 以无头模式执行(从本地或远程),报告将保存在 Jenkins 机器上。

通过 GitLab CI 我已经通过 .gitlab-ci.yml 配置文件实现了它并且它 运行 非常好:

image: "my-docker-image"

stages:
  - "chrome-tests"

before_script:
  - "apt-get update"
  - "apt-get install -y wget bzip2"
  - "npm install"

cache:
  paths:
    - node_modules/
run-tests-on-chrome:
  stage: "chrome-tests"
  script:
    - "whereis xvfb-run"
    - "xvfb-run --server-args='-screen 0 1600x1200x24' npm run test-chrome"

但是我想用 Jenkins 实现同样的过程CI。最简单的方法是什么,然后在 Jenkins 调用的 Docker 图像中 ro 运行 我的自动化测试?我应该写一个 Docker 文件还是 or or or?

查看 maintained Selenium Docker images,特别是节点风格。无论您决定按原样使用容器还是自己滚动,这都是一个很好的起点。

我目前正在 运行使用 PHP 编写的 Selenium 测试脚本,并使用 Docker Compose 通过 Jenkins 运行使用它们。您也可以这样做,而无需自己处理 Xvfb 的麻烦。

为了 运行 在 docker 容器内使用无头浏览器进行 Selenium 测试,并使用 docker-compose 将其链接到您的应用程序,您可以简单地使用预定义的独立服务器.

https://github.com/SeleniumHQ/docker-selenium

我目前正在使用 Chrome 独立映像。

您的 docker-compose 应该是这样的:

version: '3'
services:
  your-app:
    build:
      context: .
      dockerfile: Dockerfile
  your_selenium_application: 
    build:
      context: .
      dockerfile: Dockerfile.selenium.test
    depends_on:
      - chrome-server
      - your-app
  chrome-server:
    image: selenium/standalone-chrome:3.4.0-einsteinium

当 运行ning docker-compose 时,它​​将启动您的应用程序、将与您的应用程序交互的 selenium 环境以及将为您提供无头浏览器的独立服务器.因为它们是链接的,所以在您的 selenium 代码中,您可以通过 your-app:80 向主机发出测试请求。您的无头浏览器将是 chrome-server:4444/wd/hub,这是默认地址。

这一切都可以在 Jenkins 内部完成,只需在 Jenkins 作业中执行 Shell 中的一个命令即可。 docker-compose 还可以让您轻松 运行 在本地计算机上进行测试,结果应该是相同的。