Тестирование нескольких хостов с помощью одного теста с использованием 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