Как вы тестируете в автоматическом режиме сложные распределенные системы? Например, состоящие из нескольких компонентов — Cassandra, ActiveMQ, пара самописных демонов. В реальности это все крутится на 8-10 машинах, возникла необходимость прогонять в автоматическом режиме базовые тесты.
К сожалению, ограничиться тестами в каждом отдельном компоненте не выйдет — уже были случаи, когда изменения в одном из компонентов ломали другие компоненты, но тесты в них не падали — просто менялся интерфейс, а про другие компоненты забывали или не учитывали нюансы.
До сих пор тестирование велось в ручном режиме, с установкой на тестовый кластер, но во-первых, это лениво, во-вторых, руками задалбываешься проверять всё.
Самописное решение банально: поднять виртуальную машину (например на VirtualBox), дергать ее снаружи через ssh и передавать команды. Но может я не знаю какого-то очевидного и простого решения?
$vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Box 'centos' was not found. Fetching box from specified URL for
the provider 'virtualbox'. Note that if the URL does not have
a box for this provider, you should interrupt Vagrant now and add
the box yourself. Otherwise Vagrant will attempt to download the
full box prior to discovering this error.
Downloading or copying the box...
Extracting box...te: 2765k/s, Estimated time remaining: --:--:--)
Successfully added box 'centos' with provider 'virtualbox'!
[default] Importing base box 'centos'...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.
Command: ["import", "/home/oleg/.vagrant.d/boxes/centos/virtualbox/box.ovf"]
Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interpreting /home/oleg/.vagrant.d/boxes/centos/virtualbox/box.ovf...
OK.
0%...
Progress object failure: NS_ERROR_CALL_FAILED
Цель интеграционного тестирования заключается в том, чтобы взаимодействие определенных подсистем не нарушало установленного контракта.
Вы можете использовать мокирование — имитировать эталонные ответы какого-либо сервиса. Например Mockito
А вообще хорошо бы иметь функциональные тесты — покрывающие бизнес-требования и прогонять их на QA окружении, максимально похожим на production.