在gitlab-ci中测试VueJS应用程序

Ove*_*ivr 5 gitlab-ci nightwatch.js vue.js vuejs2

我使用vue-cli生成了一个VueJS项目,包括使用Nightswatch.js进行端到端测试.

我正在使用以下.gitlab-ci.yml文件

services:
  - selenium/standalone-chrome

stages:
  - test
  - pages

test:
  image: node:6.11
  stage: test
  before_script:
    - node -v
    - npm -v
  script:
    - npm install
    - npm test

pages:
  image: node:6.11
  stage: pages
  before_script:
    - node -v
    - npm -v
  script:
    - npm install
    - npm run build
    - cp -R ./dist ./public
    - cd ./public
    - ls
  artifacts:
    paths:
      - public
  only:
    - master
Run Code Online (Sandbox Code Playgroud)

这是nightswatch.conf.js文件

require('babel-register')
var config = require('../../config')

// http://nightwatchjs.org/gettingstarted#settings-file
module.exports = {
  src_folders: ['test/e2e/specs'],
  output_folder: 'test/e2e/reports',
  custom_assertions_path: ['test/e2e/custom-assertions'],

  selenium: {
    start_process: true,
    server_path: require('selenium-server').path,
    host: '127.0.0.1',
    port: 4444,
    cli_args: {
      'webdriver.chrome.driver': require('chromedriver').path
    }
  },

  test_settings: {
    default: {
      selenium_port: 4444,
      selenium_host: 'localhost',
      silent: true,
      globals: {
        devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
      }
    },

    chrome: {
      desiredCapabilities: {
        browserName: 'chrome',
        javascriptEnabled: true,
        acceptSslCerts: true
      }
    },

    firefox: {
      desiredCapabilities: {
        browserName: 'firefox',
        javascriptEnabled: true,
        acceptSslCerts: true
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在Gitlab-CI中,作业通过,但查看日志只有单元测试正在通过,而不是端到端测试.

> node test/e2e/runner.js

Starting selenium server... 
An error occurred while trying to start Selenium. Check if JAVA is installed on your machine.
{ Error: spawn java ENOENT
    at exports._errnoException (util.js:1020:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:197:32)
    at onErrorNT (internal/child_process.js:376:16)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at Module.runMain (module.js:606:11)
    at run (bootstrap_node.js:383:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:496:3
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'spawn java',
  path: 'java',
  spawnargs: 
   [ '-Dwebdriver.chrome.driver=/builds/Overdrivr/frontend/node_modules/chromedriver/lib/chromedriver/chromedriver',
     '-jar',
     '/builds/Overdrivr/frontend/node_modules/selenium-server/lib/runner/selenium-server-standalone-3.8.1.jar',
     '-port',
     4444 ] }
INFO Selenium process finished.
Job succeeded
Run Code Online (Sandbox Code Playgroud)

如何正确配置gitlab-ci或nightwatch才能在Gitlab-CI中运行e2e测试?

teh*_*one 1

好的,现在我又查看了您的配置和撰写文件,我想我看到了您的问题。您需要做的第一件事是selenium/standalone-chrome在 .yml 文件中为您的服务命名。问题是您正在尝试在未安装 java 的测试容器(节点映像)中独立启动 selenium 。然而,selenium/standalone-chrome图像确实如此,这就是您想要指向测试而不是localhost

services:
  "chrome"
  - selenium/standalone-chrome

#...rest of file can stay the same
Run Code Online (Sandbox Code Playgroud)

您需要做的第二件事是从 nightwatch 配置中完全删除 selenium 部分,并指向selenium_hostchrome 服务的 test_settings 下。

selenium_host: 'chrome',
Run Code Online (Sandbox Code Playgroud)

这是一个nightwatch.jsondocker-compose.yml我有用的。

docker-compose.yml

version: '3'
services:  
chrome:
  image: selenium/standalone-chrome
tests:
  image: nightwatch-tests
  environment: 
    - ENV_PASS=${ENV_PASS}
  depends_on:
    - chrome
Run Code Online (Sandbox Code Playgroud)

夜巡.json

{
  "src_folders": [
    "nw_tests"
  ],
  "output_folder": "nw_reports",
  "page_objects_path": "./nw_tests/pages",
  "globals_path": "globals.js",
  "test_workers": false,  
  "test_settings": {
    "default": {
      "launchUrl": "https://mylaunchurl/login",
      "selenium_port": 4444,
      "selenium_host": "chrome",
      "silent": true,
      "screenshots": {
        "enabled": true,
        "path": "nw_screenshots"
      },
      "desiredCapabilities": {
        "browserName": "chrome",
        "chromeOptions" : {
          "args": ["deny-permission-prompts"],
          "prefs": {
            "profile.default_content_settings.popups": 0,
            "download.prompt_for_download": false
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)