2013-12-24 3 views
2

Я собираюсь создать интеграционные тесты для REST API. Итак, я бы хотел запустить Jetty перед тестированием и остановить его после тестов. У меня есть Ошибка отказа связи для каждого теста. Мой раздел сборки POM.XML приведен ниже:Запуск причала с использованием Maven до теста интеграции

<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    <configuration> 
    <scanIntervalSeconds>0</scanIntervalSeconds> 
    <stopKey>foo</stopKey> 
    <stopPort>9999</stopPort> 
    <connectors> 
     <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> 
     <port>8010</port> 
     <maxIdleTime>60000</maxIdleTime> 
     </connector> 
    </connectors> 
    <contextPath>/performance-parser-service</contextPath> 
    </configuration> 
    <executions> 
      <execution> 
        <id>start-jetty</id> 
        <phase>pre-integration-test</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
        <configuration> 
         <scanintervalseconds>0</scanintervalseconds>  
         <daemon>true</daemon> 
        </configuration> 
      </execution> 
      <execution> 
        <id>stop-jetty</id> 
        <phase>post-integration-test</phase> 
        <goals> 
          <goal>stop</goal> 
        </goals> 
      </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.16</version> 
    <executions> 
     <execution> 
      <id>performance-parser-service-it</id> 
      <phase>integration-test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      <configuration> 
       <skip>false</skip> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Помогите мне решить эту проблему?

С наилучшими пожеланиями,

+0

ли тесты, указывающие на правильный порт? Я также помню, как видел плагин, который позволит вам зарезервировать открытый порт и установить переменную, которую вы можете передать и вашему контейнеру, и тестам ... – Charlie

+0

Yeap, я проверил еще раз и тесты указывают на 8010, тот же порт –

ответ

0

Может быть, не самый лучший способ, но я сделал это в прошлом, начиная Jetty программно в @BeforeClass ваших тестов. См. Здесь: http://www.eclipse.org/jetty/documentation/current/embedded-examples.html#embedded-one-webapp

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

+0

Да, Я пробовал так, как вы сказали, и это работает; однако, я ищу решение Maven для этого ... В любом случае, спасибо за ваше решение. –

2

Испытания интеграции проводятся с mvn verify, а не mvn test.

+0

Да, в конфигурации в вопросе используется плагин Surefire ('mvn test'); для тестирования интеграции следует использовать плагин Failsafe ('mvn verify'). Правильная конфигурация показана в [Руководстве по использованию Maven Failsafe] (https://maven.apache.org/surefire/maven-failsafe-plugin/index.html#Using_jetty_and_maven-failsafe-plugin). – avandeursen

1

Следующие работы для меня, основных отличий: новая версия плагина (важно: разный GroupID) и использовать цели start вместо run

<plugin> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-maven-plugin</artifactId> 
    <version>9.2.5.v20141112</version> 
    <configuration> 
     <stopPort>11079</stopPort> 
     <stopKey>STOP</stopKey> 
     <httpConnector> 
      <port>11080</port> 
     </httpConnector> 
     <webApp> 
      <contextPath>/</contextPath> 
     </webApp> 
    </configuration> 
    <executions> 
     <execution> 
      <id>start-jetty</id> 
      <phase>pre-integration-test</phase> 
      <goals> 
       <goal>start</goal> 
      </goals> 
      <configuration> 
       <scanIntervalSeconds>0</scanIntervalSeconds> 
       <daemon>true</daemon> 
      </configuration> 
     </execution> 
     <execution> 
      <id>stop-jetty</id> 
      <phase>post-integration-test</phase> 
      <goals> 
       <goal>stop</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
+1

Работает для меня, единственная второстепенная проблема заключалась в том, что элемент демона должен быть предоставлен как часть/plugin/configuration, но не/plugin/execute/execute/configuration XML-путь. – ngeek

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