Как использовать виртуальную машину с автоматическими тестами?
Я пытаюсь настроить автоматические тесты для наших приложений, используя среду виртуальной машины.
То, что я хотел бы иметь, выглядит примерно так:
- Сервер сборки автоматически запускается для автоматического тестирования приложения
- Затем выполняется "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, где бы они ни находились), и те же сценарии могут быть также используется в производстве.
Ответ 3
Хотя у меня тоже нет опыта, я слышал о нескольких приложениях в этом пространстве в последнее время:
http://www.infoq.com/news/2011/05/virtual_machine_test_harness
http://www.automatedqa.com/techpapers/testcomplete/automated-testing-in-virtual-labs/