2012-02-10 17 views
7

Sto provando a testare un'applicazione client/server e utilizzando Maven per gestire build/test/deploy. Per testare l'applicazione, ho bisogno di:Esecuzione di exec-maven-plugin più volte in una singola fase

  1. eseguire uno script di installazione (per installare il server),
  2. calcio d'inizio di un comando di avvio (per avviare il servizio),
  3. eseguire il test (maven- surefire-plugin),
  4. interrompere il servizio e
  5. disinstallare il servizio.

I passaggi 1,2,4 e 5 utilizzano il plug-in maven-exec. Il passaggio 3 utilizzerà il plugin maven-surefire.

Il problema è che tutti e 5 di questi passaggi si verificano nella fase di 'test'. Maven consente ai plug-in di essere eseguiti in un ordine specifico. il plugin exec può essere eseguito più volte utilizzando più voci. Il problema è che ho bisogno di usare il plugin surefire nel mezzo delle 4 esecuzioni exec-plugin.

Qualcuno lo ha mai incontrato prima o sa come strutturare i plug-in e le esecuzioni?

+0

credo, non è possibile ottimizzarlo. 'maven-surefire-plugin' + 'maven-surefire-plugin' +' maven-exec-plugin' è l'unico modo per farlo (a meno che tu non sia abbastanza coraggioso da scrivere il tuo plugin di maven che lo combini per te). –

risposta

4

Quello che stai cercando di fare sembra più un test di integrazione che un test di unità. Per questo caso di utilizzo del default maven lifecycle ha tre fasi relative al test di integrazione:

  • pre-integration-test: eseguire azioni necessarie prima dell'esecuzione test di integrazione. Questo può comportare cose come la creazione dell'ambiente richiesto.
  • integration-test: elaborare e distribuire il pacchetto, se necessario, in un ambiente in cui è possibile eseguire test di integrazione.
  • post-integration-test: esegue le azioni richieste dopo l'esecuzione dei test di integrazione. Questo può includere la pulizia dell'ambiente.

Il plugin surefire di solito viene eseguito nella fase test, ma può essere riconfigurato per l'esecuzione in un'altra fase. I passaggi 1 + 2 possono quindi essere configurati per l'esecuzione in pre-integration-test, mentre i passaggi 4 + 5 devono essere eseguiti in post-integration-test.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <!-- Skip execution in test phase and execute in integration-test phase instead --> 
    <configuration> 
     <skip>true</skip> 
    </configuration> 
    <executions> 
     <execution> 
      <id>surefire-it</id> 
      <phase>integration-test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      <configuration> 
       <skip>false</skip> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

Questo è, più o meno, il percorso che ho seguito. Non sono sicuro del motivo per cui Maven manchi di fasi pre-test e post-test, ma basterà utilizzare la fase di test di integrazione. – SlimyTadpole

10

Così ho configurato i plugin exec e failsafe. Sto usando failsafe, piuttosto che riconfigurare surefire, dal momento che surefire sta ancora eseguendo altri test per essere in fase di test. Questo eseguirà i passaggi 1 e 2 nella fase di preintegrazione (le esecuzioni multiple elencate per la stessa fase verranno eseguite nell'ordine indicato), eseguirà il test nella fase di test di integrazione e quindi ripulirà con i passaggi 3 e 4 nel fase post-integrazione.

(Nota: ho comandi echo al posto della vera e propria installazione e comandi di pulizia)

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>integration-test</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <forkMode>always</forkMode> 
    </configuration> 
</plugin> 

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>step1</id> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
      <phase>pre-integration-test</phase> 
      <configuration> 
       <executable>echo</executable> 
       <arguments> 
        <argument>foo</argument> 
       </arguments> 
      </configuration> 
     </execution> 
     <execution> 
      <id>step2</id> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
      <phase>pre-integration-test</phase> 
      <configuration> 
       <executable>echo</executable> 
       <arguments> 
        <argument>bar</argument> 
       </arguments> 
      </configuration> 
     </execution> 
     <execution> 
      <id>step3</id> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
      <phase>post-integration-test</phase> 
      <configuration> 
       <executable>echo</executable> 
       <arguments> 
        <argument>baz</argument> 
       </arguments> 
      </configuration> 
     </execution> 
     <execution> 
      <id>step4</id> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
      <phase>post-integration-test</phase> 
      <configuration> 
       <executable>echo</executable> 
       <arguments> 
        <argument>woot</argument> 
       </arguments> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

Con quale versione del plugin si tratta?Non riesco ad eseguire il plugin con all'interno dell'esecuzione nella versione 1.2.1 – avanderw

Problemi correlati