用于硒和无头Chrome的Rails系统测试的Gitlab CI Config

时间:2019-07-04 22:40:30

标签: ruby-on-rails selenium-webdriver gitlab-ci google-chrome-headless system-testing

我正在尝试为一个非常简单的Rails项目建立连续的Gitlab集成,尽管进行了所有搜索,但仍找不到任何可行的解决方案来使无头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 :(得分:0)

how services are linked to the jobaccessing the services中表示如果您启动tutum/wordpress容器(通过service节);

  

tutum/wordpress将启动,您将可以使用以下两个主机名从构建容器中访问它:

     
      
  • tutum-wordpress
  •   
  • tutum__wordpress
  •   
     

注意:带下划线的主机名是RFC无效的,可能会导致第三方应用程序出现问题

这就是我要如何进行:

  • 尝试使用http://selenium-standalone-chrome:4444/wd/hub,尽管这似乎是一种低概率的解决方案。
  • 在测试驱动程序中
  • 输出SELENIUM_URL。设置正确吗?
  • 按照how the health check of services works中的内容查看日志。 standalone-chrome即将出现吗?
  • 在某处添加pingnslookupselenium-standalone-chrome(或替代方法)在解决吗?看来确实如此,否则我们会得到“ 主机名未知”而不是“ 连接被拒绝”,但是您永远不能太确定。