Назад | Перейти на главную страницу

Puppet, тестовые роли в контрольном репо с beaker-rspec

Я хочу протестировать свое контрольное репо (в нем есть профили и роли) с помощью rspec-puppet и beaker-rspec. У меня все еще возникают проблемы с beaker-rspec:

Я настроил beaker-rspec, и он работает, но это занимает много времени, потому что он применяет все профили один за другим. Я вижу в этом следующие проблемы:

Я бы предпочел:

Также было бы хорошо, если бы beaker-rspec тестировал каждый профиль в новой виртуальной машине (но тогда я бы хотел переключить тесты для другого использования).

Как я могу этого добиться? Спасибо :)

Вот несколько разных ответов:

beaker-rspec должен проверить, какие роли были определены, а затем запустить отдельную виртуальную машину для каждой из ролей. Это следует делать либо последовательно, либо (лучше) параллельно.

Beaker-rspec не может использовать полностью новую SUT (тестируемую систему) для каждого набора тестов. Единственный способ сделать это прямо сейчас - создать новый файл _spec.rb для каждого теста, а затем запустить каждый тест в новом процессе, например. bundle exec rspec spec/acceptance/profile_test_one.rb && bundle exec rspec spec/acceptance/profile_test_two.rb

Для последовательной или параллельной работы, вероятно, лучше всего сделать это на вашей платформе CI. Так, например, для Трэвиса (или Jenkins с плагином Matrix) вы должны создать тестовую матрицу с разными тестами для каждого профиля, чтобы их можно было запускать параллельно. Для этого требуется очень мощная машина для тестирования, особенно если вы используете компактные виртуальные машины.

Как я могу сократить время для каждого запуска, особенно если у вас довольно большая установка Puppet с несколькими ролями и разными версиями ОС и т. Д. Возможно, выберите тип тестов («только ролевые тесты» или «только профильные тесты»).

Что вы имеете в виду, когда говорите «сократить время»? Сколько времени занимает запуск Puppet или сколько времени нужно, чтобы довести машину до тестируемого состояния?

Использование экземпляров Docker значительно ускоряет состояние подготовки компьютера.

Чтобы ускорить запуск Puppet, это зависит от того, что медленно. Если это вычисление, увеличьте SUT, дайте ему больше ядер или RAM. Для проблем, зависящих от сети, вы можете использовать кеширование. Например, на Mac вы можете использовать Squid для кеширования всех необходимых пакетов RPM / APT

Обычно я не провожу приемочное тестирование ролей. Роли в основном представляют собой мета-профили: они не должны иметь логики и представляют собой просто набор профилей.

Единственным преимуществом тестирования роли будет обнаружение конфликтов при использовании нескольких профилей, но конфликты и проверки зависимостей могут быть лучше обнаружены с помощью rspec-puppet, а не приемочного теста.

Так, например, такая роль, как:

class role::foo_blog {
  include profile::base
  include profile::nginx
  include profile::php
  include profile::mysql
}

Было бы проще просто протестировать каждый из четырех профилей с помощью приемочных тестов и написать тест rspec-puppet, чтобы убедиться, что разные профили не имеют проблем с зависимостями или конфликтов.