Führen Sie TestNG / JUnit-Integrationstests auf dem Remote-Server in der IDE aus

8

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.

    
ifischer 09.06.2011, 11:36
quelle

4 Antworten

4

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:

  1. Richten Sie in Jenkins einen Job namens "Integrated Testing" ein (der Name spielt keine Rolle). Konfigurieren Sie es so, dass die Tests ausgeführt werden, die Sie in Ihrer IDE ausführen möchten, und dass Remote-Computer Builds auslösen dürfen.
  2. Machen Sie diesen Job zu einem parametrisierten Job und fügen Sie einen Dateiparameter hinzu. Nehmen wir an, das heißt 'TestingProgram'. Dies ist das Programm, das der Job testen wird.
  3. Veranlassen Sie, dass der integrierte Testjob die TestingProgram-Datei zum Ausführen der Tests verwendet. Wenn Ihr Programm mehr als eine Datei benötigt, nehmen Sie an, dass es sich um eine Zip-Datei handelt, die alle notwendigen Dateien enthält.
  4. Konfigurieren Sie Ihr Eclipse-Projekt, um dieselben Dateien zu erzeugen, die der Integration Testing-Job erwartet (ich nehme an, dass dies bereits geschieht, da vermutlich eine Art Bin-Version Ihres Programms erstellt wird)

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:

  1. Wenn Ihr Programm mehrere Dateien benötigt und Eclipse dies nicht bereits tut, müssen Sie diese Dateien komprimieren
  2. Es muss die Datei nehmen und sie in eine Variable einlesen und dann base64 kodieren. Es gibt viele Bibliotheken, die sich um das meiste kümmern, zB dieses . Nehmen wir an, diese Datei wird in eine Variable namens $programFile eingelesen.
  3. Es muss eine HTTP-Anfrage an 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.

    
Laepdjek 20.06.2011 07:05
quelle
2

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.

    
AlexR 09.06.2011 12:06
quelle
2

Ich habe es nicht selbst gemacht (meine Tests sind lokal), aber hier sind einige Dinge, die funktionieren könnten:

  • Cargo kann verwendet werden, um einen Server zu betreiben und Module darin einzusetzen
  • Die Tests können mit Cactus (ziemlich alt) oder JUnitEE durchgeführt werden. In beiden Fällen implementieren Sie die Tests mit JUnit und führen sie remote aus. Eine andere Möglichkeit besteht darin, die Tests zu schreiben, um mit einer dedizierten API auf Ihrem Server zu interagieren, die die Tests ausführt und zurückmeldet.
David Rabinowitz 21.06.2011 10:31
quelle
2

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 >     

KingQQ 14.01.2013 02:28
quelle