4

Ich habe ein Selenium Grid mit 3 verschiedenen Servern eingerichtet, auf denen Knoten als Windows-Dienste laufen. Ich muss diese Maschinen regelmäßig neu starten, um Speicherlecks und Leistungseinbußen zu vermeiden. Um dies zu tun, muss ich einen Job planen, um die Knoten auf einem Server herunterzufahren und neu zu starten, während die Tests auf die verbleibenden Server übertragen werden. Wiederholen Sie den gleichen Vorgang mit geplanten Jobs auf den anderen Servern.Gibt es eine Möglichkeit, das Herunterfahren von Selenium-Knoten zu planen, ohne die Tests zu unterbrechen?

Gibt es eine Möglichkeit, einen Selen-Knoten auszuschalten, sobald der aktuelle Test abgeschlossen ist? Oder um den Status eines bestimmten Knotens zu erhalten, sodass ich jeden einzelnen in einem geplanten Job überprüfen kann, um sicherzustellen, dass der Knoten keinen Test ausführt, bevor ich ihn herunterfahre?

Antwort

2

Sie die Anzahl der aktiven Sitzungen durch Anforderung jeden Knoten mit dem /sessions Befehl überprüfen konnte:

http://127.0.0.1:4444/wd/hub/sessions 

Antwort:

{"state":"success","sessionId":null,"hCode":3217742,"value":[],"class":"org.openqa.selenium.remote.Response","status":0} 
+0

Vielen Dank. Ich habe das vorher gesehen, dachte aber, dass es sich um eine Abfrage auf dem Hub handelt, und ich habe einige Fehler bei der Verwendung bekommen. Erst nachdem ich es hier gesehen habe, habe ich festgestellt, dass es als http: // : /wd/hub/sessions verwendet wird. – Sh3mm

+0

Follow-up-Frage: Ich kann sehen, welche Knoten aktive Sitzungen mit dem Befehl haben, den Sie erwähnten. Aber wenn ich versuche, den Knoten herunterzufahren, benutze: http: // knoten_ip_adresse: port/selen-server/driver /? Cmd = shutDownSeleniumServer. Die Wartezeit zwischen dem Herunterfahren und dem Entfernen durch den Hub ist nicht schnell genug, um zu vermeiden, dass diesem Knoten neue Tests zugewiesen werden. Kennen Sie eine Möglichkeit, diesen Prozess zu beschleunigen oder einen Knoten unbemerkt zu registrieren, anstatt ihn zu beenden und darauf zu warten, dass die Zeit auf dem Hub ausfällt, um aus dem Grid entfernt zu werden? – Sh3mm

+1

Es ist nicht möglich, die Registrierung eines Knotens aufzuheben, indem ein Befehl an den Haupt-Hub gesendet wird. –

1

@ Sh3mm

Irgendwann zurück schrieb ich auf ein Blog Post, der im Grunde genommen darüber spricht, wie man ein "Self Healing Grid" (Selbstheilungsgitter) baut, nach dem man eigentlich suchen sollte.

Sie können durch meine Blog-Post auf das von here lesen.

Wir haben im Wesentlichen den gleichen Ansatz verwendet, als wir am Aufbau des SeLion Grid arbeiteten. Das SeLion Grid packt in ein paar mehr Raffinessen. Lesen Sie mehr darüber here

Es gibt eine weitere Variante von im Wesentlichen die gleiche Art von Funktionalitäten, die von GroupOn als Teil ihrer Grid-Extras erstellt wurde. Sie können einen Blick darauf werfen here

+0

Danke Krishnan, ich bin tatsächlich auf diesen Blogpost gestoßen, aber ich war mir nicht sicher, ob es genau das war, wonach ich suchte. Ich habe meinen Hub und Knoten mit nssm installiert, um als Windows-Dienste zu laufen. Und ein Teil von dem, was ich will, ist zu wissen, wenn sie nicht verwendet werden, um den Server nicht nur die Knoten neu zu starten. Ich war mir nicht sicher, ob die Grid-Extras als Windows-Dienste konfiguriert werden können oder ob es notwendig war, alles zu tun und ein Servlet zu erstellen. Ich hatte gehofft, einfach einen geplanten Job auszuführen, um zu überprüfen, ob ein Knoten verwendet wird. Wenn er nicht heruntergefahren wird, starte ich den Server neu, sobald alle Knoten heruntergefahren sind. Wiederholen Sie dies über die anderen Maschinen hinweg. – Sh3mm

+0

Wie gehen Sie in Ihrer Lösung damit um, dass der Hub, wenn der Knoten nicht registriert ist, dies nicht sofort weiß und weiterhin versuchen wird, ihm Tests zuzuweisen, bis das Zeitlimit überschritten wird? – Sh3mm

+1

@ Sh3mm In dieser Lösung entfernt das Grid auch den Knoten aus seiner Registrierung, wenn er eine "kill" -Anweisung senden will. Das Szenario, das Sie aufrufen, wird nie passieren. –