2015-05-21 4 views
9

В разделе «Расширенные советы» сайта Serverspec показан пример тестирования нескольких хостов с тем же набором тестов. Я построил пример своего (https://gist.github.com/neilhwatson/81249ad393800a76a8ad), но есть проблемы.Тестирование нескольких хостов с тем же тестом с использованием serverpec

Первая проблема заключается в том, что тесты останавливаются при первом сбое, а не проходят через лот и сохраняют подсчет. Во-вторых, выход сбоя не указывает, на каком хосте произошел сбой. Что я могу сделать, чтобы исправить эти проблемы и подготовить окончательный отчет для всех хостов?

ответ

2

По первому вопросу ServerSpec по умолчанию запускает все ваши тесты. Однако, поскольку у вас есть цикл, который выполняет задачу Rake для каждой среды, первое окружение, которое имеет сбой, приводит к сбою задачи, и поэтому возникает исключение, а остальные задачи не выполняются.

Я разветвил ваш gist и обновил Rake task to surround it with a begin/rescue.

... 
begin 
    desc "Run serverspec to #{host}" 
    RSpec::Core::RakeTask.new(host) do |t| 
    ENV['TARGET_HOST'] = host 
    t.pattern = "spec/base,cfengine3/*_spec.rb" 
    end 
rescue 
end 
... 

Для второй задачи, это не выглядит как ServerSpec будет выводить какую среду тесты работают. Но так как обновленный Gist показывает, что хозяин получает набор в spec_helper.rb мы можем использовать, чтобы add an RSpec configuration что устанавливает after(:each) и выводит только host на ошибки. Соответствующие изменения кода находятся в fork of the gist, но в основном вы будете просто нужно ниже фрагмент в spec_helper.rb:

RSpec.configure do |c| 
    c.after(:each) do |example| 
    if example.exception 
     puts "Failed on #{host_run_on}" 
    end 
    end 
end 
+0

ближе, но я до сих пор не могу сказать, что хост сбой происходит на. Новая строка: https://gist.github.com/neilhwatson/1d41c696102c01bbb87a –

+0

Новая ошибка: 'example' недоступна из примера (например, блок' it') или из конструкций, которые выполняются в области примера (например, 'before',' let' и т. д.). Он доступен только в группе примеров (например, в блоке 'describe' или' context'). –

+0

Ahh, мой плохой, это от RSpec 2, а не RSpec 3. Это делается в RSpec 3: http://stackoverflow.com/a/26164289/238292. Я обновлю ответ. –