In meiner IDE (Eclipse oder NetBeans, spielt keine Rolle) habe ich einige TestNG-Testklassen (aber meine Frage bezieht sich auch auf entfernte JUnit-Tests), die Integrationstests sind. Für diese Tests muss ein Integrationsserver ausgeführt werden, sie können nicht auf einem lokalen Computer ausgeführt werden. Sie benötigen die komplette Umgebung des Integrationsservers - nicht nur JavaEE containerbezogene Sachen (= & gt; kein Arquillian oder JEEUnit).
Nun möchte ich in der Lage sein, diese Tests innerhalb meiner IDE (Eclipse) auszuführen - vorzugsweise mit dem TestNG Plugin - aber wenn ich sie starte, sollten sie eigentlich auf dem Remote Integration Server laufen.
Ist es möglich, Integrationstests auf einem Remote-Server von meiner IDE aus zu starten? Ich mag die Idee, eine Art von Agent auf dem Remote-Server zu haben, der auf Testanfragen wartet und sie ausführt. Aber wie gesagt, es wäre schön, wenn das innerhalb des TestNG-Plugins läuft.
Brauche ich eine Art Workaround, zum Beispiel Ant-Skripte (hoffentlich nicht) oder irgendeine Maven-Magie? Was sind die besten Praktiken?
Ich weiß, dass ich auch Webservices für meine Anwendung erstellen kann. Dann kann ich sie aus lokalen Unit-Tests aufrufen. Aber ich würde gerne wissen, ob es auch Möglichkeiten ohne Webservices gibt.
Wie Sie dies erreichen werden, hängt sehr davon ab, welchen Integrationsserver und welche IDE Sie verwenden und welche Anwendung Sie verwenden. Ich nehme an, dass Sie Eclipse verwenden; und ich gehe davon aus, dass du Jenkins benutzt Jenkins , da es IMO am einfachsten sein wird, es zu tun, was du willst.
Das meiste funktioniert sofort. Es gibt jedoch ein bisschen, das einige zusätzliche Arbeit erfordert.
Sie möchten Folgendes tun:
Jetzt kommt der etwas kompliziertere Teil der Verbindung von Eclipse zu Jenkins. Leider glaube ich nicht, dass es bereits existierende Werkzeuge gibt, die genau das machen, was Sie wollen. Die gute Nachricht ist, dass es mit einem benutzerdefinierten Skript sehr einfach zu erreichen sein sollte. Das ganze Skript muss tun:
$programFile
eingelesen.
http://<your-jenkins-server>:8080/<integrated-testing-job-name>/buildwithparameters?TestingProgram=$programFile
gesendet werden
Sie können mehr über das Auslösen von Jenkins-Remote-Builds mit Parametern in den jenkins docs .
Das Skript, das diese Schritte ausführt, kann so ziemlich alles sein. Angesichts der Tatsache, dass Sie es letztlich in Ihre IDE integrieren möchten, scheint es, als wäre die logischste Wahl ein ant-Skript oder ein Eclipse-Plugin. Keine wäre zu kompliziert - das ant-Skript würde nur diese Schritte ausführen, und Sie könnten das ant-Skript speziell für Tests in ein Eclipse-Projekt importieren - und ein Plugin könnte einfach einen Menüeintrag hinzufügen, der bei Ausführung in einem Projekt ausgeführt würde die obigen Schritte für das Projekt.
HINWEIS: Es gibt verschiedene Möglichkeiten, einen Build mit Parametern unter Verwendung von Jenkins auszulösen. Sie können beispielsweise eine POST-Anfrage durchführen, json verwenden, um den Parameter zu übergeben, wie in den jenkins-Dokumenten beschrieben, mit denen ich verlinkt habe, Jenkins CLI usw. Nicht alle von ihnen arbeiten mit Dateiparametern, aber Sie würden sie alle in a verwenden sehr ähnliche Vorgehensweise - als Schritt in Ihrem benutzerdefinierten Skript würden Sie eine Remote-Version von Jenkins ausführen und die Datei übergeben, mit der Sie testen möchten. Zum Beispiel geht die Erklärung, die ich gab, davon aus, dass die Testdatei sehr klein ist; Wenn dies nicht der Fall ist, sollten Sie stattdessen eine POST-Anfrage stellen. Wenn Sie Probleme mit einer Methode haben, sollte es ziemlich einfach sein, sie auf eine andere Methode umzustellen, die besser funktioniert.
Leider habe ich keine fertige Lösung, aber ich denke, ich kann Ihnen ein paar Tipps geben, da ich einige Zeit darüber nachgedacht habe.
Ich weiß nichts über TestNG, aber JUnit hat die Fähigkeit, einen eigenen Test-Executor zu pluginieren. Ich bin sicher, dass TestNG entsprechende Funktionalität hat. Also, finde es und sei damit vertraut. Da Sie steuern können, wie Ihr Test aufgerufen wird, können Sie auch etwas anderes tun, anstatt die Methoden des Testfalls aufzurufen. Rufen Sie beispielsweise eine Remote-API auf, mit der der Test remote ausgeführt werden kann.
Offensichtlich kann es ein Web-Service sein, der einen Remote-Agenten (entsprechend Ihrem Vorschlag) dazu bringt, einen Test auf dem entfernten Rechner durchzuführen. Es ist in Ordnung, aber ich mag agentenlose oder halbmittelfreie Lösungen mehr. Was meine ich? Wenn Ihr Remote-Computer beispielsweise Unix ist, können Sie eine SSH- oder Telnet-Verbindung herstellen und die Befehlszeile ausführen. In diesem Fall können Sie mvn- oder ant-Skript erstellen, mit ssh auf remote-Rechner kopieren und dann ausführen. Das Skript führt Ihre Tests aus. Es ist fast Agent weniger. Sie benötigen nur Java-Installation und SSH-Unterstützung.
Wenn der Remote-Computer Windows ist, können Sie entweder Telnet oder WMI verwenden. Wenn also die Sicherheit kein Problem ist, Sie aber plattformübergreifende Unterstützung benötigen, verwenden Sie Telnet.
Bitte zögern Sie nicht, sich mit mir in Verbindung zu setzen, wenn Sie weitere Hilfe zu SSH / Telnet benötigen.
Ich habe es nicht selbst gemacht (meine Tests sind lokal), aber hier sind einige Dinge, die funktionieren könnten:
In meiner Lösung werde ich einen lokalen JNDI-Server zu Mittag essen und ein entferntes Objekt hinzufügen (ein Objekt implementiert die Remote-Schnittstelle), dann könnten Sie das Remote-Objekt verwenden, um Ihre lokale IDE und Ihren Remote-Server oder einen anderen Ort zu synchronisieren >
Tags und Links java java-ee integration-testing junit testng