Как управлять контейнером Tomcat во время выполнения с Maven? - PullRequest
2 голосов
/ 10 февраля 2010

У меня есть проект Maven, который выполняет интеграционные тесты для другого веб-приложения. Это приложение развернуто и запущено в контейнере Tomcat.

Конфигурация для этого выполняется в «cargo-maven2-plugin»:

 <plugin>
  <groupId>org.codehaus.cargo</groupId>
  <artifactId>cargo-maven2-plugin</artifactId>
  <configuration>
   <wait>false</wait>
   <configuration>
    <type>standalone</type>
    <properties>
     <cargo.hostname>${itest.hostname}</cargo.hostname>
     <cargo.protocol>${itest.protocol}</cargo.protocol>
     <cargo.servlet.port>${itest.port}</cargo.servlet.port>
     <cargo.servlet.uriencoding>UTF-8</cargo.servlet.uriencoding>
     <cargo.jvmargs>-Xmx1024m</cargo.jvmargs>
    </properties>
   </configuration>
   <container>
    <containerId>tomcat6x</containerId>
    <home>${TEST_TOMCAT_HOME}</home>
   </container>
   <deployer>
    <deployables>
     <deployable>
      <groupId>de.apllicationundertest</groupId>
      <artifactId>apllicationundertest</artifactId>
      <type>war</type>
      <!--
       This will test if the app is ready an throw an exception if
       the integration tests start before deployment is finished
      -->
      <pingURL>${itest.protocol}://${itest.hostname}:${itest.port}/${itest.web.context}/main.html 
      </pingURL>
      <pingTimeout>120000</pingTimeout>
      <!--  Setting our context for the integration tests -->
      <properties>
       <context>${itest.web.context}</context>
      </properties>
     </deployable>
    </deployables>
   </deployer>
  </configuration>
  <executions>
   <execution>
    <id>start-container</id>
    <phase>pre-integration-test</phase>
    <goals>
     <goal>start</goal>
     <goal>deploy</goal>
    </goals>
   </execution>
   <execution>
    <id>stop-container</id>
    <phase>post-integration-test</phase>
    <goals>
     <goal>stop</goal>
    </goals>
   </execution>
  </executions>
 </plugin>

Тестируемая (web-) заявка интегрируется в pom.xml моего проекта интеграционного тестирования как зависимость, поэтому у меня нет абсолютного или относительного пути к войне.

Моя проблема в том, что я не могу контролировать контейнер Tomcat во время выполнения моей программы. Хотя мой сценарий тестирования требует остановки и перезапуска контейнера (и перераспределения тестируемого приложения) между некоторыми тестами, например для проверки, есть ли еще активные потоки после остановки контейнера или все еще есть некоторые элементы моего приложения в кэше, ...

  1. Я хочу настроить запуск и остановку контейнера вне java , предпочтительно в pom.xml. Это возможно?
  2. Могу ли я указать, что определенные модульные тесты требуют перезапуска и выполнить это? Как?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2010

Я хочу настроить запуск и остановку контейнера вне java, желательно в pom.xml. Это возможно?

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

Могу ли я указать, что определенные модульные тесты требуют перезапуска и выполнить это? Как?

Нет, это невозможно. Maven не имеет такой детализации и не дает вам никаких зацепок за это. Если это действительно то, что вам нужно, у вас есть два варианта:

  • Управление контейнером из Java, как я описал в этом предыдущем ответе .
  • Поместите тесты в отдельные модули maven (чтобы maven запускал и останавливал ваш контейнер для каждого).
0 голосов
/ 10 февраля 2010

Я не думаю, что это возможно, поскольку запуск контейнера выполняется в фазе pre-integration-test. Почему специфические тесты должны выполняться на перезапущенном сервере? Если это возможно, попробуйте переписать свой тест (выполните очистку).

Я хочу настроить запуск и остановку контейнера вне java, желательно в pom.xml. Это возможно?

Если вам это вряд ли нужно, вы можете попробовать поместить конфигурацию для отдельных тестов в выделенные профили . Каждый профиль будет содержать конфигурацию грузовых и надёжных / отказоустойчивых плагинов.

Могу ли я указать, что определенные модульные тесты требуют перезапуска и выполнить это? Как?

Вы можете указать, какой тест следует запускать. Посмотрите на surefire / failsafe конфигурация плагина

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.5</version>
    <configuration>
      <includes>
        <include>Sample.java</include>
      </includes>
    </configuration>
    <executions>
      <execution>
        <id>integration-test</id>
        <phase>integration-test</phase>
        <goals>
          <goal>integration-test</goal>
        </goals>
      </execution>
      <execution>
        <id>verify</id>
        <phase>verify</phase>
        <goals>
          <goal>verify</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>
...