Frage

Ich gründe ein Integrationstestmodul für eine gute Größe Webprojekt auf. Die Integration Testmodul ist selbst von dem Web-Projekt getrennt, und es hat seine eigene pom.

Die Idee ist es, die Maven-soapui-Plugin zu verwenden, Anfragen zu senden und die Antwort zu überprüfen. Einrichten des soapui-Plugin ist keine Hektik. Allerdings ist ich mit, herauszufinden, Probleme, wie ich der Anlegestelle-maven-Plugin sagen kann, einen Krieg von einer Remote-Repository zu implementieren.

Wenn ich richtig verstanden habe, die Anlegestelle-maven-plugin hat eine Eigenschaft namens ‚ / ‘, die ich die Krieg-Datei bereitstellen angeben können. Das Problem ist, dass die Krieg-Datei in dem Modul nicht vorhanden ist, selbst.

Ich habe gehört, dass ich die Versammlung Maven verwenden Plugin den Krieg aus einem Repository über die Projekte artifactId zurückzuholen, aber ich bin noch herausfinden, wie ich über das Tun so gehen würde.

Hier ist eine Zusammenfassung dessen, was ich will:

  1. Rufen Sie einen bestimmten Krieg aus einem Repository oder dergleichen, beispielsweise über seine artifactId.
  2. Bereitstellen dieser Krieg zur Anlegestelle-maven-plugin (Ziel deploy-Krieg?)
  3. get Maven-soapui-Plugin Tests auszuführen und die Ergebnisse zurück in der Integration Testphase zu melden.

Ich bin ziemlich sicher, dass muss ich Schritt 3 überdacht, aber ich bin sehr unsicher, wie Schritt zu erreichen. 1 und 2

Jede Hilfe wird sehr geschätzt

War es hilfreich?

Lösung

Es ist vielleicht möglich Gebrauch dependency:copy den Krieg abzurufen, entpacken und das Ganze zum Laufen zu bringen mit der Maven Jetty Plugin, aber dies wäre Hacky und irgendwie hässlich. Eine sauberere Lösung wäre, die Maven Cargo-Plugin zu verwenden, und das ist mein Vorschlag. Im Folgenden wird eine Probe POM zeigt, wie eine WAR-Artefakt mit seinen Koordinaten abrufen und wie es auf einem eingebetteten Jetty Container mit Fracht implementieren:

<dependencies>
  <dependency>
    <groupId>war group id</groupId>
    <artifactId>war artifact id</artifactId>
    <type>war</type>
    <version>war version</version>
  </dependency>
  ...
</dependencies>
...
<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven2-plugin</artifactId>
      <configuration>
        <!-- Container configuration -->
        <container>
          <containerId>jetty6x</containerId>
          <type>embedded</type>
        </container>
        <!-- Configuration to use with the container or the deployer -->
        <configuration>
          <deployables>
            <deployable>
              <groupId>war group id</groupId>
              <artifactId>war artifact id</artifactId>
              <type>war</type>
              <properties>
                <context>war context</context>
              </properties>
            </deployable>
          </deployables>
        </configuration>
        <!-- Don't wait, execute the tests after the container is started -->
        <wait>false</wait>
      </configuration>
      <executions>
        <execution>
          <id>start-container</id>
          <phase>pre-integration-test</phase>
          <goals>
            <goal>start</goal>
          </goals>
        </execution>
        <execution>
          <id>stop-container</id>
          <phase>post-integration-test</phase>
          <goals>
            <goal>stop</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>

Schließlich, so bindet die soapui Plugin auf der integration-test Phase.

Andere Tipps

Ich tue das Gleiche, John, aber ich habe einen anderen Ansatz mit dem Jetty Plugin. Ich denke, das Endergebnis ist das gleiche. Ich entwickle eine Integration-Test-Suite gegen mehr Web-Service-WARs laufen. Ich verwende dependency:copy in der package Phase und dann einer Liste von <contextHandler/>s für maven-jetty-plugin konfiguriert:

<project>
    …
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-wars</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>

                        <configuration>
                            <outputDirectory>${project.build.directory}/wars-to-be-tested</outputDirectory>
                            <stripVersion>true</stripVersion>
                            <artifactItems>
                                …
                                <artifactItem>
                                    <groupId>groupId</groupId>
                                    <artifactId>artifactId</artifactId>
                                    <version>version</version>
                                    <type>war</type>
                                </artifactItem>
                                …
                            </artifactItems>
                        </configuration>
                    </execution>
               </executions>
            </plugin>

            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>7.1.3.v20100526</version>
                <configuration>
                    …
                    <contextHandlers>
                        …
                        <contextHandler implementation="org.mortbay.jetty.plugin.JettyWebAppContext">
                            <war>${project.build.directory}/wars-to-be-tested/artifactId.war</war>
                            <contextPath>/context</contextPath>
                        </contextHandler>
                    </contextHandlers>
                </configuration>

                <executions>
                    <execution>
                        <id>start-jetty</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                            <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>
        </plugins>
    </build>
</project>

Ich würde es vorziehen, um die verschiedenen Kriege als Abhängigkeiten zu erklären und dann dependency:copy-dependencies verwenden, um das wars-to-be-tested Verzeichnis einzurichten; dies wäre der Maven Reaktor erlauben, um herauszufinden, dass es meine Integration-Testmodul nach den Kriegen bauen muss, um es zu testen werde. Das Problem, das ich war lief in, dass die Jetty Plugin gedacht, dass ich auf „Overlay“ alle Kriege wollte, als Abhängigkeiten (ein Konzept, das würde ich noch nie gehört, bis ich sah es passieren) aufgeführt wurden; Ich weiß nicht, ob damit das weh alles hätte passieren, aber ich mochte es nicht, so dass ich mit dem dependency:copy Verfahren ging.

Das ist nur eine Alternative zum Transport verwenden. Ich werde ein Blick in dem ich selbst, aber ich wollte nur, es zu tun eine andere Art und Weise zur Verfügung zu stellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top