Развернуть на сервере интеграции и запустить тест дыма с Maven - PullRequest
6 голосов
/ 03 августа 2011

Мы используем Maven для создания веб-приложения.

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

Мы используем для этого Cargo-Maven-Plugin, и он отлично работает.

Однако теперь мы также хотели бы запустить тест на дым на удаленном Tomcat после развертывания, чтобы убедиться, что(пере) развертывание прошло гладко.

У нас есть тесты для этого (с использованием HtmlUnit), но у нас возникают проблемы при интеграции их в Maven.Пока что мы начали грузить напрямую (используя mvn cargo:redeploy).Это сработало - однако мы не смогли найти способ запустить тесты на дым после этого.

Итак, как мы можем настроить maven для

  • первого развертывания с использованием Cargo
  • затем запустите тесты дыма

Кажется, в жизненном цикле сборки maven нет места для этого.Нужно ли нам определять собственный жизненный цикл сборки?Можем ли мы каким-то образом привязаться к фазе жизненного цикла по умолчанию?Какой?

1 Ответ

9 голосов
/ 03 августа 2011

Самое важное, что вам нужно сделать, - это поместить вашу интеграцию в отдельный модуль maven, назовите его как угодно (для тестирования интеграции). Переведите грузовой плагин в фазу интеграции:

<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <configuration>
      <wait>false</wait>
      <container>
        <containerId>tomcat${tomcat.major}x</containerId>
        <zipUrlInstaller>
          <url>http://archive.apache.org/dist/tomcat/tomcat-${tomcat.major}/v${tomcat.version}/bin/apache-tomcat-${tomcat.version}.tar.gz</url>
          <downloadDir>${project.build.directory}/cargo/download/</downloadDir>
          <extractDir>${installDir}</extractDir>
        </zipUrlInstaller>
        <output>${project.build.directory}/tomcat${tomcat.major}x.log</output>
        <log>${project.build.directory}/cargo.log</log>
      </container>
      <configuration>
        <home>${project.build.directory}/tomcat-${tomcat.version}/container</home>
        <properties>
          <cargo.logging>high</cargo.logging>
          <cargo.servlet.port>9080</cargo.servlet.port>
        </properties>
      </configuration>
    </configuration>

добавить блоки исполнения:

  <executions>
      <execution>
        <id>start-container</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>start</goal>
          <goal>deploy</goal>
        </goals>
        <configuration>
          <deployer>
            <deployables>
              <deployable>
                <groupId>${project.groupId}</groupId>
                <artifactId>mod-war</artifactId>
                <type>war</type>
                <pingURL>http://localhost:9080/mod-war</pingURL>
                <pingTimeout>30000</pingTimeout>
                <properties>
                  <context>mod-war</context>
                </properties>
              </deployable>
            </deployables>
          </deployer>
        </configuration>
      </execution>

и часть отключения:

      <execution>
        <id>stop-container</id>
        <phase>post-integration-test</phase>
        <goals>
          <goal>stop</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Приведенная выше конфигурация описывает полный цикл тестирования интеграции с загрузкой tomcat, распаковкой дистрибутива tomcat, развертыванием файла war (зависимый проект в tomcat), запуском веб-приложения и, наконец, остановкой Tomcat. Что вам нужно изменить для своих целей, так это то, что у вас нет начальной фазы, потому что у вас уже есть работающий контейнер. Как это сделать, описано в грузовой документации . Наконец, вы должны поместить свои интеграционные тесты в папку src / test / java модуля тестов интеграции и не забудьте сконфигурировать плагин maven-surefire, как показано ниже:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <executions>
      <execution>
        <phase>integration-test</phase>
        <goals>
          <goal>test</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <printSummary>true</printSummary>
      <testFailureIgnore>true</testFailureIgnore>
    </configuration>
  </plugin>

Вы можете посмотреть полный пример здесь . Описание этого дано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...