Тестирование нескольких хостов с помощью одного теста с использованием serverpec

В разделе "Дополнительные советы" на сайте Serverspec приведен пример тестирования нескольких хостов с одинаковым набором тестов. Я создал собственный пример ( https://gist.github.com/neilhwatson/81249ad393800a76a8ad), но есть проблемы.

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

1 ответ

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

Я раздвоил твою суть и обновил задачу Rake, чтобы окружить ее началом / спасением.

...
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 мы можем использовать это, чтобы добавить конфигурацию RSpec, которая устанавливает after(:each) и только вывести host на ошибки. Соответствующие изменения кода находятся в развилке сути, но в основном вам просто понадобится приведенный ниже фрагмент в вашем spec_helper.rb:

RSpec.configure do |c|
  c.after(:each) do |example|
    if example.exception
       puts "Failed on #{host_run_on}"
    end
  end
end
Другие вопросы по тегам