wake-up-neo.com

Wie kann ich GUI-Tests auf einem Jenkins-Windows-Slave ohne Remote-Desktop-Verbindung ausführen?

Ich habe einen Jenkins-Agenten unter Windows 7 und einen Jenkins-Server unter Linux eingerichtet. Ich führe GUI-Tests auf dem Windows-Agenten aus. Es läuft einwandfrei, wenn eine Remotedesktopverbindung angeschlossen ist, andernfalls jedoch ein Fehler auftritt. Ich habe diesen Link gefunden, Jenkins unter Windows und GUI-Tests ohne RDC

Die dort angebotene Lösung ist jedoch ziemlich vage. Es scheint, als sei die einzige Lösung, Jenkins Server irgendwie dazu zu veranlassen, dass eine Remotedesktopverbindung jederzeit geöffnet ist. Ich kann aber keine solche Option finden. Könnte mir bitte jemand klar beibringen, wie ich dieses Problem lösen kann? 

Sehr geschätzt!

29
Kelvin

Ihre Slave-Maschinen müssen sich auf einem Desktop befinden, bevor der Test ausgeführt werden kann richtig. Wir hatten das gleiche Problem.

Die Lösung bestand darin, den Testcomputer zu starten und sich automatisch am .__ anzumelden. Desktop. Um sicherzustellen, dass der Test NUR nach dem Desktop gestartet wird Wenn verfügbar, fügten wir eine geplante Aufgabe hinzu, die bei der Benutzeranmeldung ausgeführt wurde Das würde den Jenkins-Slave über Java Web Start starten. Dieser Weg, Jenkins würde den Slave erst sehen, wenn der Desktop ausgeführt wurde. Nach dem das hat alles gut geklappt.

Dies ist die gewinnende Antwort auf die Frage, mit der Sie verlinkt haben, und es ist sehr klar, was zu tun ist. Das gesamte Setup ist außerhalb von Jenkins. Jason Swager beschrieb, wie er einen Benutzer automatisierte, der sich an einer Windows-Desktop-Maschine anmeldete und den Jenkins-Slave in der Benutzersitzung startete.

Und jetzt Schritt für Schritt:

1. Stellen Sie sicher, dass Sie über eine GUI verfügen

Die Lösung bestand darin, den Testcomputer zu starten und sich automatisch am Desktop anzumelden

Konfigurieren Sie einen Standard-Windows-Desktop, um sich beim Starten von Windows automatisch bei einem bestimmten Benutzer anzumelden. Auf diese Weise muss sich niemand physisch am Desktop anmelden. (siehe So aktivieren Sie die automatische Anmeldung in Windows 7 )

2. Jenkins Slave starten

Sie müssen den Jenkins-Slave innerhalb dieser Benutzereinstellung starten. Andernfalls hat der Jenkins-Slave keinen Zugriff auf die Windows-UI-Komponenten (dh er kann nicht mit dem Desktop interagieren).

Um sicherzustellen, dass der Test NUR nach dem Desktop gestartet wird Wenn verfügbar, fügten wir eine geplante Aufgabe hinzu, die bei der Benutzeranmeldung ausgeführt wurde Das würde den Jenkins-Slave über Java Web Start starten.

Sie müssen also eine geplante Task erstellen und sie so konfigurieren, dass Ihr Jenkins-Client mit Java Web Start gestartet wird.

3. benutze es

Auf diese Weise würde Jenkins den Slave nur sehen, wenn der Desktop ausgeführt wurde. Nach dem das hat alles gut geklappt.

Wenn der Slave online ist, können Sie Ihre UI-Tests ausführen.

22
Peter Schuetze

Um dies zu beheben, legen Sie die Windows-Auto-Anmeldung fest, wie ich es hier erkläre: https://serverfault.com/questions/269832/windows-server-2008-automatic-user-logon-on-on-power-on/606130 # 606130

Erstellen Sie anschließend einen Startbatch für Jenkins Slave (legen Sie ihn im Jenkins-Verzeichnis ab), um die Konsole auf dem Desktop zu starten und GUI-Jobs auszuführen:

Java -jar slave.jar -jnlpUrl http://{Your Jenkins Server}:8080/computer/{Your Jenkins Node}/slave-agent.jnlp

(slave.jar kann von http: // {Your Jenkins Server}: 8080/jnlpJars/slave.jar heruntergeladen werden)

EDIT: Wenn Sie black-Screenshots erhalten (wenn Sie beispielsweise Selenium verwenden), erstellen Sie eine Batch-Datei, die die Verbindung zwischen Remote Desktop und nicht die RDP-Sitzung mit der regulären X-Taste beendet:

%windir%\system32\tscon.exe %SESSIONNAME% /dest:console
5
Noam Manos

Die folgende Sache hat den Trick für mich gemacht:

In Jenkins führen Sie den Windows-Shell-Befehl aus:

  • cmdkey /generic:TERMSRV/<servername> /user:<username> /pass:<password>
  • mstsc /v:<servername> /w:<width> /h:<height>
  • cd <path to your pom.xml>
  • <maven command> (z. B. mvn test -Dfiles_to_run=groupLaunch.xml
  • cmdkey /delete:TERMSRV/<servername>

Es erstellt echte Mstsc-Sitzung (Win-to-Win) mit der angegebenen Breite und Höhe in Ihrer virtuellen Mstsc-Sitzung (Jenkins-to-Win), die von Jenkins betrieben wird.

2
dred17

Da die obigen Lösungen etwas übertrieben waren, habe ich diesen Ansatz verwendet:

  1. Deaktivieren Sie den Dienst Jenkins
  2. Starten Sie Jenkins von der Befehlszeile aus mit Java -jar C:\Program Files (x86)\Jenkins\jenkins.war

Aus irgendeinem Grund musste ich alle Plugins und alles installieren, wenn ich sie auf diese Weise starte. Daher empfehle ich, ein Backup zu erstellen. Dafür gibt es Plugins. Viel Glück. :)

0
Daniel

Ich habe die hier angebotenen Lösungen ausprobiert, aber nichts hat für mich funktioniert. Am Ende fand ich eine Problemumgehung. 

Ich habe eine RDP-Verbindung zu VM in einem anderen VM (VM2) hergestellt. Ich habe die erste Verbindung in VM2 offen gelassen und die Verbindung getrennt. 

Es hat funktioniert, aber das bedeutet, dass zwei virtuelle Maschinen verfügbar sind.

Sie müssen weiterhin RDP verwenden, aber in meinem Fall können wir loopback des RDP in derselben VM verwenden.

Der Ablauf:

  1. Erstellen Sie in einer VM zwei verschiedene Konten und erstellen Sie einen Jenkins-Slave für beide Konten.

Jetzt haben Sie zwei Jenkins-Slave für zwei Konten in einer VM

sklave 1 - Konto 1

slave 2 - Konto 2

  1. Aktivieren Sie mehrere RDP-Folder https://www.serverwatch.com/server-tutorials/how-to-enable-concurrent-remote-desktop-sessions-in-windows.html

  2. Führen Sie in Slave 2 (mit Konto 2) den Befehl rdp aus, um die Verbindung zu Slave 1 (mit Konto 1) herzustellen. Gehen Sie dazu wie folgt vor: __. Starten Sie/b "" "C:\RDP\rdp.exe"/v: 127.0. 0.2/domain: \/u: admin/p: xxxx/fullscreen/w: 1920/h: 1200 

127.0.0.2 ist sehr wichtig, es ist eine Loopback-Verbindung für RDP

Setzen Sie den obigen Befehl in den Jenkins-Job mit dem Namen "OpenRDP_ToVMXXX", und Sie können dann jeden Test auf Slave 1 mit aktivierter GUI ausführen.

0
August