2016-10-31 3 views
1

Недавно у нас было несколько проблем в нашем приложении Rails 4, которое можно было бы предотвратить с помощью простой проверки, чтобы убедиться, что как основное приложение, так и рабочий процесс правильно загружают нашу заявление.Как автоматизировать тестирование успешной загрузки Sidekiq Process

Наша PROCFILE для Heroku выглядит так:

web: bundle exec unicorn -p $PORT -c config/heroku/unicorn.rb 
sidekiq: bundle exec sidekiq -q high -q medium -q low 

Сейчас мы проводим очень большой набор тестов, который занимает 30 минут, чтобы закончить, даже когда рассекает пакет через 10 с лишним контейнеров.

Мы используем CircleCI и рассматриваем возможность добавления теста, подобного следующему, который имитирует процесс загрузки Sidekiq.

require 'spec_helper' 

RSpec.describe 'Booting processes' do 

    context 'Sidekiq server' do 
    it 'loads successfully' do 
     boot_sidekiq_sequence = <<-SEQ 
     require 'sidekiq/cli' 
     Sidekiq::CLI.instance.environment = '#{ENV['RAILS_ENV']}' 
     Sidekiq::CLI.instance.send(:boot_system) 
     SEQ 

     expect(system(%{echo "#{boot_sidekiq_sequence}" | ruby > /dev/null})).to be_truthy, 
     "The Sidekiq process could not boot up properly. Run `sidekiq` to troubleshoot" 
    end 
    end 
end 

Проблема с этим состоит в том, что:

  • Это не совсем полное испытание нашего процесса загрузки приложений, который потребует чтения из нашего PROCFILE (мы также хотим защитить УБС от принятия критических изменений там)
  • Это медленное и добавит приблизительно 30 секунд к нашему испытательному времени выполнения.
  • Это немного низкоуровневое по моему вкусу.

Что делает тестирование процесса загрузки Sidekiq, в частности, сложным, заключается в том, что он будет завершен только в случае сбоя при загрузке.

Может ли кто-нибудь рекомендовать лучший, более быстрый и более тщательный подход к автоматизации такого рода испытаний?

+0

Почему downvotes? Человек, это место жестоко. – doremi

+1

Кажется подходящим для SO, но люди часто обсуждают вопросы, которые являются открытыми и не имеют четкого ответа. –

+0

Есть ли способ, чтобы я мог сделать это более конкретным? Даже ваш совет в другой теме «просто требуется UAT» является приемлемым ответом. Это поможет мне разобраться с моими участниками. – doremi

ответ

1

Для тестирования интеграции всегда лучше всего запускать процесс как можно ближе к производству, поэтому bundle exec sidekiq .... Я бы не использовал API CLI для его загрузки в процессе.

Я бы первый епдиеий специальную работу, которая просто делает это:

def perform 
    puts "Sidekiq booted" 
    Process.kill($$, TERM) # terminate ourselves 
end 

Затем выполнить Sidekiq, запустив исполняемый файл и мониторинг STDOUT. Если вы видите/загрузили/в течение 30 секунд, нажмите PASS. Если вы не видите ничего в течение 30 секунд, FAIL и убейте ребенка.