Как использовать виртуальную машину с автоматическими тестами?

Я пытаюсь настроить автоматические тесты для наших приложений, используя среду виртуальной машины.

То, что я хотел бы иметь, выглядит примерно так:

  • Сервер сборки автоматически запускается для автоматического тестирования приложения
  • Затем выполняется "build" script, который состоит из:
    • Скопировать файлы приложений и тест script в местоположение, доступное VM.
    • Запустить виртуальную машину
      • В виртуальной машине специальное приложение просматривает общую папку и запускает тест script
      • Тесты script выполняют свою работу, результаты выводятся в общую папку
      • Тест script завершает
      • Специальное приложение затем удалит тест script
      • В специальном приложении диспетчер VM закрывает виртуальную машину и возвращается к предыдущему снимку
    • Когда VM вышла, обработайте результат и отправьте на сервер сборки.

Я использую TeamCity, если это имеет значение. Для виртуальных машин мы используем VirtualBox, но при необходимости мы открыты для любых других.

Есть ли какие-либо приложения/набор, которые будут управлять этим сценарием?

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

Что мне нужно сделать, так это заставить VM закрыть себя после теста и вернуться к предыдущему снимку, так как я хочу, чтобы он находился в известном состоянии для следующего теста.

Любые указатели?

Ответ 1

VirtualBox имеет COM API. У меня нет опыта, но это возможно. Один из вариантов заключается в том, чтобы для TeamCity был отключен script. Я предлагаю начинать с NAnt (поддерживается в основном TeamCity) и, возможно, при необходимости запускает PowerShell.

Ответ 2

У меня работает аналогичная установка, и я решил использовать Vagrant, так как это то же самое, что наши разработчики, где используют для нормализации среды разработки,

Начальное состояние виртуальной машины было написано с использованием марионетки, но мы не запускали сценарии развертывания с нуля на каждом тесте только один раз в день.

Вы можете использовать кукольный/повар для всего, но для всех других операций на виртуальной машине мы использовали сценарии Fabric, поскольку они были использованы для реального развертывания тоже, и как-то подобрались, как мы работали лучше. В сумме script будет выглядеть примерно так:

vagrant up   # fire up the vm, and run the puppet provisioning tool
fab vm run_test  # run tests on vm
fab local process_result  # process results on local shared folder
vagrant destroy  # destroy the vm

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