Ist es möglich, zu Testzwecken eine "in-process" Tomcat-Instanz zu haben?

8

Ich habe ein Maven-basiertes Web-App-Projekt, das einen WAR generiert, der in Tomcat läuft. Nehmen wir als Argument an, dass es für die Unit-Tests dieses Projekts äußerst wichtig ist, Anfragen über das -Netzwerk zu senden / zu empfangen (anstatt Servlet-Methoden einfach mit einer Scheinanfrage aufzurufen).

>

Gibt es eine Möglichkeit für meine Testumgebung, eine Tomcat-Instanz in derselben JVM auszuführen, das aktuelle Projekt zu laden und die Testfälle auf localhost zu setzen? Wie sollte ich das aktuelle Projekt (zusammen mit den Abhängigkeiten) programmatisch in eine WAR-Datei packen, damit ich Cargo verwenden kann, um es programmatisch auf eine andere Tomcat-Instanz hochzuladen? Gibt es eine bessere Alternative als nur auf mvn zu schälen?

Ich weiß, dass meine Anfrage ungewöhnlich ist und Komponententests in sich abgeschlossen sein sollten, aber bitte lasst uns einfach mitspielen:)

    
Adrian Petrescu 16.11.2012, 03:08
quelle

4 Antworten

5

Sie können einen eingebetteten Tomcat verwenden genau diesen Zweck. Richten Sie einfach eine statische Instanz in Ihrem Testkabelbaum ein und schließen Sie sie am Ende ab. Hier ist ein Beispielcode:

%Vor%     
Arun P Johny 17.11.2012, 01:02
quelle
6

Jetty funktioniert wirklich gut für diesen Zweck. Wenn Sie Tomcat nicht benötigen, können Sie dies während der Integrationstestphase ganz einfach nutzen. Haben Sie den Pre-Integration-Start-Jetty und Post-Integration stoppen Sie es und Sie können Anfrage an Ihre War-Datei werfen, weil es in einem tatsächlichen Container ausgeführt wird.

    
Michael 16.11.2012 04:49
quelle
2

Ich würde vorschlagen, geeignete Integrationstests zu erstellen und das folgende Setup zu verwenden, um Integrationstests während des Maven Builds durchzuführen.

Sie können den folgenden Teil verwenden, um Tomcat herunterzuladen, oder wenn Sie ein Artefakt aus Ihrem Repository verwenden müssen.

%Vor%

Der nächste Teil wird verwendet, starten Sie und stellen Sie Ihre Anwendung in den angegebenen Tomcat (auch mit Anlegesteg arbeiten).

%Vor%

und natürlich endlich den gestarteten Server über:

zu stoppen %Vor%

Am besten ist es, diese Art von Konfiguration in ein separates Maven-Modul zu stecken, das app-it heißen könnte (es ist ein Integrationstest). Der komplette Testzyklus kann einfach von

aufgerufen werden %Vor%

während im Verify-Lebenszyklus die Integrationstestphase läuft und die obige Konfiguration startet. Aber es ist wichtig, das maven-failsafe-Plugin zu konfigurieren, damit die Integrationstests selbst ausgeführt werden können. Eine detaillierte Beschreibung dazu finden Sie im Maven Unit- und Integration Test Guide

%Vor%     
khmarbaise 16.11.2012 08:33
quelle
0

Was Sie tun können, ist, einen Archetyp mit tomcat maven plugin von Apache zu generieren, siehe Ссылка .

Sie werden verschiedene Beispiele haben:

  • eingebettete Junit-Tests
  • starte eine Tomcat-Instanz mit einem Krieg und führe Selentests
  • aus

HTH

    
Olivier Lamy 16.11.2012 08:59
quelle

Tags und Links