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

Mar*_*tin 5 selenium node.js jenkins docker nightwatch.js

我想执行我的自动化测试,用Nightwatch-CucumberDocker容器中的Jenkins CI 编写.我有一个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"
Run Code Online (Sandbox Code Playgroud)

但我想与Jenkins CI实现相同的程序.什么是最简单的方法,并在Jenkins调用的Docker镜像中运行我的自动化测试?我应该写一个Dockerfile或者不是或者或者?

Ser*_*rey 1

我目前正在运行用 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
Run Code Online (Sandbox Code Playgroud)

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

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