14 мая 2012

Запуск тестов под различными окружениями с помощью Maven


Зачастую при запуске тестов необходимо иметь возможность быстро настраивать параметры их запуска, а если говорить еще более приземленно - набор тестов зачастую запускается с испльзованием одной из нескольких конфигураций параметров.
В этом месте каждый становиться кто во что горазд - конфигурационные файлы, переменные окружения, пользовательский ввод, и даже наличие отсустсиве определенных файлов на жестком диске (дадад!!! и такое я тоже видел).
Сказать что конфигурационные файлы  - это плохо - нельзя, очень-таки даже хорошо, вот только переключаться между ними не всегда удобно, особенно если запуск происходит на Continuous Integration сервере.
Один из приемов который я нашел для себя - это создание профиля запуска.
Дальше речь будет идти об использовании Maven, однако не думаю что есть сильно большая разница как это делать используя другие инструменты.

Итак Maven славен тем что имеет возможности управления зависимостями проекта, плагинную архитектуру, свойства и ... профили.
ПРофили свборк в Maven  позволяют переопределять массу всяких свойств в зависимости от указанного профиля.
Подробнее - в документации к самому maven.
Суть предлагаемого мною приема состоит в следующем:
В pom.xml определяется набор свойств, одним из которых является путь к файлу с настройками конфигурации.
В pom.xml определяется ряд профилей, которые переопределяют значение указанного свойства в зависимости от нужд.
Вот так  например

Итого имеем:
ряд файлов конфигураций
Ряд профилей
одно (или сколько вам нужно) конфигурируемых свойств
единый механизм конфигурирования вида
mvn clean install -P

C первого взгляда ничем не лучше того что было в самом начале.
Но.... "набор тестов зачастую запускается с испльзованием одной из нескольких конфигураций параметров." - вот это место и можно зафикировать.
В нашем случае фиксация данного места производится с помощью создания ряда job-ов на сервере CI.
И за полгода у нас их не стало более 10.
Хотя конечно у данного способа есть свои ограничения на примемение.