Gitlab CI Config для тестов системы Rails с Selenium и безголовым Chrome - PullRequest
3 голосов
/ 05 июля 2019

Я пытаюсь настроить непрерывную интеграцию с Gitlab для очень простого проекта Rails и, несмотря на все мои поиски, не могу найти никакого работоспособного решения для обеспечения работы системных тестов с использованием Chrome без головы.

Вот мой .gitlab-ci.yml файл:

image: 'ruby:2.6.3'


before_script:
  - curl -sL https://deb.nodesource.com/setup_11.x | bash -
  - apt-get install -y nodejs
  - apt-get install -y npm
  - gem install bundler --conservative
  - bundle install
  - npm install -g yarn
  - yarn install

stages:
  - test

test:
  stage: test
  variables:
    MYSQL_HOST: 'mysql'
    MYSQL_DATABASE: 'cwrmb_test'
    MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
    SYSTEM_EMAIL: 'test@example.com'
    REDIS_URL: 'redis://redis:6379/'
    SELENIUM_URL: "http://selenium__standalone-chrome:4444/wd/hub"
  services:
    - redis:latest
    - selenium/standalone-chrome:latest
    - name: mysql:latest
      command: ['--default-authentication-plugin=mysql_native_password']
  script:
    - RAILS_ENV=test bin/rails db:setup
    - bin/rails test:system

Вот мой application_system_test_case.rb:

require 'test_helper'

def selenium_options
  driver_options = {
    desired_capabilities: {
      chromeOptions: {
        args: %w[headless disable-gpu no-sandbox disable-dev-shm-usage]
      }
    }
  }
  driver_options[:url] = ENV['SELENIUM_URL'] if ENV['SELENIUM_URL']
  driver_options
end

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: selenium_options
end

Однако эта конфигурация выдает следующую ошибку для каждого системного теста:

Selenium::WebDriver::Error::UnknownError: java.net.ConnectException: Connection refused (Connection refused)

Я не верю, что в этом файле конфигурации есть какие-либо другие ошибки (связанные с Redis или MySQL), потому что, как только я опускаю системные тесты, все работает отлично.

Кстати, если у кого-то есть более подходящие файлы конфигурации для достижения той же цели, мне бы хотелось посмотреть, что делают другие. Заранее спасибо.

1 Ответ

0 голосов
/ 09 июля 2019

В как сервисы связаны с заданием и , обращающимся к сервисам , это говорит о том, что если вы запускаете контейнер tutum/wordpress (через раздел service);

tutum/wordpress будет запущен, и у вас будет доступ к нему из вашего контейнера сборки под двумя именами хостов на выбор:

  • тутум-WordPress
  • tutum__wordpress

Примечание. Имена хостов с подчеркиванием недопустимы в соответствии с RFC и могут вызвать проблемы в сторонних приложениях

Вот как я бы поступил:

  • попробуйте с http://selenium-standalone-chrome:4444/wd/hub, хотя это кажется маловероятным решением ..
  • вывод SELENIUM_URL в вашем тестовом драйвере. Правильно ли настроен?
  • просмотреть журналы, как в как работает проверка работоспособности служб . standalone-chrome подходит?
  • добавьте туда ping или nslookup. selenium-standalone-chrome (или альтернатива) разрешается? Кажется, что в противном случае мы получили бы « имя хоста неизвестно », а не « Отказано в соединении », но вы никогда не можете быть слишком уверены.
...