2013-02-12 2 views
3

Было бы разумно запускать модульные тесты для каждой сборки, но полностью пропустить этап интеграции интеграции - оставить его на сервере CI?Запуск интеграционных тестов на сервере CI только с использованием maven

В настоящее время я работаю над проектом JavaEE, который охватывает почти только некоторые интеграционные тесты, которые плохо написаны и занимают много времени. Каждый раз, когда я делаю какие-либо изменения, мне приходится ждать несколько минут для сборки (из которых, как и 90% времени, это те интеграционные тесты).

Моей идеей является настройка некоторого сервера CI, например. Дженкинс, чтобы он взял любую фиксацию, сделанную в репозиторий (или даже лучше после сборки maven), и запустил сборку maven с интеграционными тестами. Но возможно ли настроить maven таким образом, чтобы при вводе mvn install он выполнял компиляционные модульные тесты - строил проект, но полностью исключал фазу интеграции (чтобы ускорить разработку). Тогда CI заберет и снова начнет работу над сборкой, но на этот раз с интеграционными тестами?

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

Это хорошая идея? Может ли кто-нибудь предложить, как настроить maven для получения такого поведения?

ответ

4

Вы должны быть в состоянии сделать это с помощью профилей. Хотя мне может понадобиться дополнительная информация о конфигурации ваших интеграционных тестов. Я делал это с проектами в течение нескольких лет, используя комбинацию maven-failafe-plugin и профилей. Вот пример отрывок из П:

<profiles> 
    <profile> 
     <id>integration-tests</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-failsafe-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>integration-test</id> 
          <goals> 
           <goal>integration-test</goal> 
          </goals> 
          <configuration> 
           ... 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Во время нормального развития на местном уровне, работает mvn install не должен запускать интеграционные тесты, которые выполняются через Maven-безотказный-плагин. Затем вы можете настроить сервер CI для запуска mvn clean install -Pintegration-tests.

+0

Спасибо, это именно то, что я искал. Я попробую этот подход, когда у меня будет время на установку. – kajman

1

Прежде всего, я думаю, что это отличная идея. Это сделает ваш цикл разработки намного быстрее.

Я не знаю, как полностью отказаться от фазы интеграции, когда вы выполняете установку mvn. Можете ли вы выполнить «mvn clean package» вместо этого во время разработки? Если это не вариант, какой плагин вы используете для вашего теста интеграции? У большинства плагинов есть атрибут «skip», который вы можете использовать, чтобы пропустить выполнение плагина. Вы можете использовать профиль, чтобы включить или выключить «пропустить» для разных сценариев.

+0

Спасибо за поддержку :) Я относительно новичок в тестировании интеграции и maven, поэтому я еще не выбрал никаких плагинов. Думаю, я поеду с maven-отказоустойчивым плагином, как указано в другом ответе. – kajman

Смежные вопросы