Как настроить предварительные условия теста перед тестом ServerSpec?

Я пишу простую кулинарную книгу, которая будет использоваться для развертывания SSL-прокси на сервере. Эта поваренная книга в конечном итоге будет использоваться другими поваренными книгами, которые развертывают веб-службы, чтобы настроить SSL-прокси перед ними, но для тестирования самой прокси-поваренной книги такой службы за ней нет. Моя основная стратегия тестирования для этой поваренной книги выглядит следующим образом:

  1. Соедините коробку с тест-кухней
  2. Use ServerSpec (or possibly Bats) with test-kitchen to
    1. Setup test by starting a python SimpleHTTPServer on the box listing on the port that the proxy was configured to forward to, and create in index.html file for it to serve.
    2. Утверждают, что когда я нажимаю https://localhost, я получаю файл, который обслуживает SimpleHTTPServer.
    3. Укажите еще несколько вещей о прокси (все они требуют, чтобы за ним стояла служба).
  3. Срывать. На самом деле не нужно ничего сносить, просто дайте тест-кухне уничтожить коробку.

Итак, мой вопрос: как правильно настроить такие предварительные условия тестирования с помощью тестовой кухни и ServerSpec и/или летучих мышей?


person Kenneth Baltrinic    schedule 17.03.2015    source источник
comment
Итак, я обнаружил, что Bats поддерживает методы настройки и демонтажа, потому что это не зависит от шеф-повара. Но летучие мыши немного ограничены для кросс-платформенных тестов. Все еще ищу, есть ли способ получить эту функциональность в ServerSpec.   -  person Kenneth Baltrinic    schedule 17.03.2015


Ответы (2)


Если установка и демонтаж действительно не являются частью того, что я тестирую, то я обычно просто выполняю их в Ruby где-нибудь, что запускается перед каждым тестом (часто в spec_helper.rb). Поскольку serverpec буквально запускает код ruby ​​построчно на экземпляре тестовой кухни, мне не кажется необходимым иметь в serverpec что-то, что предлагает функциональность установки/демонтажа (другими словами, нет проблем с заказом или повторными тестами, которые потребует вызова метода установки или демонтажа).

person Martin    schedule 17.03.2015
comment
Извините, если это невежественный вопрос, но я не рубиновый гуру и относительно новичок в экосистеме шеф-повара. Тем не менее, будет ли этот подход работать для гарантированного демонтажа, или мне нужно поместить все мои тесты в блок восстановления, чтобы гарантировать демонтаж? (Я обнаружил, что мне нужно разбирать, а не полагаться на уничтожение кухни, если я хочу повторно запускать тесты во время разработки без необходимости полностью воссоздавать свои виртуальные машины). - person Kenneth Baltrinic; 18.03.2015
comment
Обычный совет — полностью уничтожить и заново создать виртуальные машины для чистого теста. Обычно я получаю прохождение тестов с использованием kitchen converge и kitchen verify, а затем делаю полный kitchen test, чтобы убедиться, что у меня больше нет изменений. Есть ли причина, по которой вы не можете выполнить очистку старого состояния и повторную настройку за один шаг настройки? - person Martin; 19.03.2015
comment
Да, я тоже так делаю. Таким образом, в простых случаях размещение очистки в верхней части установки может сработать, но я вижу более сложные случаи с несколькими спецификациями, имеющими конфликтующие потребности в настройке. Я не хочу, чтобы каждая специализация знала, как разрушить любую другую спецификацию. Лучше, если каждый будет заниматься своим делом. - person Kenneth Baltrinic; 19.03.2015
comment
Если в спецификациях есть какое-то состояние, которое трудно очистить, я бы порекомендовал отдельные наборы тестов. Трудно гарантировать начало с чистого листа, даже если тестовая среда предусмотрела этап демонтажа. - person Martin; 21.03.2015

Старый вопрос, но для полноты:
Вы можете использовать before rspec в serverspec.

describe file('/tmp/testfile') do
  before do
    File.write('/tmp/testfile', 'Hello, world')
  end
  it { should exist }
  its(:content) { should include('Hello') }
end

Тип http_get из https://github.com/jantman/serverspec-extended-types может предоставить то, что необходимо для тестирования HTTP-сервера, из serverspec.

person Christo    schedule 15.05.2018