Vor Kurzem musste ich die Zoom-Videokonferenz testen und simulieren, dass 100 Personen gleichzeitig an dem Meeting teilnehmen. Nachdem ich davon erfahren hatte, fand ich heraus, dass Zoom eine Möglichkeit bietet, dem Meeting direkt über einen URL-Link beizutreten (nur über den Chrome- oder FireFox-Browser, da das verwendete Protokoll WebRTC ist). Wenn wir diesem Gedanken folgen, können wir die Selenium-Automatisierung nutzen, um mehrere Browserprozesse gleichzeitig zu starten, wobei jeder Prozess einen Videokonferenzbenutzer darstellt, um den Effekt der Simulation einer Mehrparteienkonferenz zu erzielen. Es gibt jedoch zwei Schwierigkeiten:
Der Chrome-Browser bietet eine bessere Unterstützung für Audio- und Videoquellen von Videokonferenzen. In den Parametern zur Initialisierung des Chrome-Browsers im Selenium-Skript müssen Sie nur die folgende Konfiguration hinzufügen: chrome_options.add_argument("--use-fake-ui-for-media-stream") chrome_options.add_argument("--use-fake-device-for-media-stream") Sie können virtuelles Video und Audio verwenden, nachdem Sie der Videokonferenz beigetreten sind. Es gibt jedoch ein Problem, das berücksichtigt werden muss. Es scheint eine Lücke in der Videoqualität zwischen diesem virtuellen Video und der realen Videokonferenz zu geben. Wird dies die Testergebnisse beeinflussen? Dieses Thema werden wir hier vorerst nicht diskutieren. Das einzige Problem ist jetzt, wie 100 Chrome-Browserprozesse implementiert werden sollen. Sie denken vielleicht: Ist das nicht nur ein Ressourcenproblem? Wäre das Problem nicht durch das Hinzufügen eines Servers zu lösen? ! Aber wie planen wir Aufgaben, wenn wir über Serverressourcen verfügen? Glücklicherweise gibt es Selenium Grid, eine der drei Hauptkomponenten von Selenium, die speziell für die Durchführung verteilter Tests entwickelt wurde. Daher wurde ein Testplan auf Basis von Selenium Grid entworfen:
Gemäß den oben genannten Designideen ist es theoretisch möglich, die gleichzeitige Teilnahme von 100 Personen an einem Meeting zu simulieren. Als Nächstes beginnen wir offiziell damit, zu erkunden, wie man mit Docker eine verteilte Selenium Grid-Umgebung erstellt. Das Selenium-JAR-Paket startet den Knoten direkt Tatsächlich habe ich am Anfang das JAR-Paket verwendet, um den Knoten direkt zu starten. Bei einigen Knoten war das akzeptabel, aber bei zu vielen Knoten wäre es sehr problematisch gewesen. Wenn ich beispielsweise die Knoten neu starten wollte, musste ich sie alle manuell beenden und dann einen nach dem anderen starten. Jede manuelle, sich wiederholende Arbeit kann per Skript ausgeführt werden. Also habe ich zwei Shell-Skripte geschrieben, ein Skript startet die entsprechende Anzahl von Knoten gemäß den übergebenen Parametern; das andere Skript beendet alle Knotenprozesse. Das Hauptskript wird unten angezeigt: Obwohl es mithilfe von Skripten problemlos ausgeführt werden kann, ist es dennoch umständlich. Erstens werden nach dem Starten des Knotens viele Java-Prozesse hinzugefügt, und es ist unmöglich, die Protokolle eines einzelnen Knotens anzuzeigen, da die Protokolle aller Knoten gleichzeitig auf der Konsole gedruckt werden. Daher habe ich überlegt, Docker zur Verwaltung von Selenium-Grid-Knoten zu verwenden. Starten Sie direkt mit dem Docker-Befehl Auf GitHub gibt es ein fertiges Image: https://github.com/SeleniumHQ/docker-selenium. Anschließend listet das Beschreibungsdokument auch alle verfügbaren Image-Namen auf. Da ich hauptsächlich den Chrome-Browser verwende, habe ich die folgenden drei Images installiert: selenium/hub, selenium/node-chrome und selenium/node-chrome-debug. Das Image selenium/node-chrome-debug startet einen VNC-Server. Während der Skriptausführung können Sie sich lokal mit dem VNC-Server verbinden und den Skriptausführungsstatus des Servers über die Schnittstelle anzeigen. Verwenden Sie den Befehl: $ Docker-Pull Selenium/Hub $ Docker-Pull Selenium/Node-Chrome $ Docker Pull Selenium/Node-Chrome-Debug Der Befehl zum Starten des Hubs lautet wie folgt: $ docker run -d -p 4444:4444 -e GRID_MAX_SESSION=100 --name hub selenium/hub Der Befehl zum Starten des lokalen Knotens (Hub und Knoten befinden sich auf derselben Maschine) lautet wie folgt: $ docker run -d -p 5555:5555 -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 --shm-size=2g --link hub:hub --name node1 selenium/node-chrome Der Befehl zum Starten eines Remote-Knotens (Hub und Knoten befinden sich nicht auf derselben Maschine) lautet wie folgt: $ docker run -d -p port:5555 -e HUB_HOST=Remote-IP -e HUB_PORT=Remote-Port -e REMOTE_HOST=http://IP:Port -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 --shm-size=2g --name node1 selenium/node-chrome Hierbei ist zu beachten, dass die Startbefehle vieler Online-Tutorials alle darauf abzielen, dass sich Hub und Knoten auf derselben Maschine befinden. Wenn sich Hub und Knoten auf unterschiedlichen Maschinen befinden müssen, wird nach Befolgen des Online-Tutorials zwar beim Start kein Fehler auftreten, das Netzwerk zwischen Knoten und Hub wird jedoch getrennt. Obwohl Sie die Protokolle eines einzelnen Knotens direkt mit dem Docker-Befehl anzeigen können, besteht dabei dasselbe Problem wie bei der Verwendung des JAR-Pakets: Das Starten mehrerer Knoten ist sehr umständlich und erfordert mehrere manuelle Befehle. Gibt es eine bessere Lösung? Natürlich können Sie Docker-Compose verwenden, um Docker-Container zu integrieren. Docker-Compose starten Docker Compose ist ein Befehlszeilentool von Docker, das zum Definieren und Ausführen von Anwendungen verwendet wird, die aus mehreren Containern bestehen. Dies entspricht dem Einfügen mehrerer Docker-Befehle in eine Datei und deren anschließende Ausführung mit einem Klick mithilfe von Docker-Compose. Ebenso gibt es zwei Situationen: Hub und Knoten befinden sich auf derselben Maschine Sie können die folgende Konfigurationsdatei docker-compose.yml verwenden Version: "3" Leistungen: Selenium-Hub: Bild: Selenium/Hub Containername: Selenium-Hub Häfen: - „4444:4444“ Umfeld: – GRID_MAX_SESSION=50 -GRID_TIMEOUT=900 - START_XVFB=false Chrom: Bild: Selenium/Node-Chrome Bände: - /dev/shm:/dev/shm hängt ab von: - Selen-Hub Umfeld: – HUB_HOST=Selenium-Hub – HUB_PORT=4444 – NODE_MAX_INSTANCES = 5 – NODE_MAX_SESSION=5 Führen Sie dann den Befehl in der Konsole aus: $ docker-compose up -d //-d bedeutet, dass es im Hintergrund ausgeführt wird Was ist, wenn Sie mehrere Knoten gleichzeitig starten möchten? Ganz einfach: $ docker-compose up -d --scale chrome=num //num ist die Anzahl der zu startenden Knoten Wenn Sie den Knoten herunterfahren möchten, können Sie den folgenden Befehl ausführen: $ Docker-Compose nach unten Hub und Knoten befinden sich nicht auf derselben Maschine Sie können die folgende Konfigurationsdatei docker-compose.yml verwenden Version: "3" Leistungen: # Selen-Chrom-1 Selenium-Chrome-Knoten-1: Bild: Selenium/Node-Chrome Bände: - /dev/shm:/dev/shm Häfen: - „5556:5555“ Neustart: immer stdin_open: wahr Umfeld: HUB_HOST: hub_ip HUB_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 REMOTE_HOST: http://nodeip:5556 GRID_TIMEOUT: 60000 shm_size: "2 GB" # Selen-Chrom-2 Selenium-Chrome-Knoten-2: Bild: Selenium/Node-Chrome Bände: - /dev/shm:/dev/shm Häfen: - „5555:5555“ Neustart: immer stdin_open: wahr Containername: Knoten1 Umfeld: HUB_HOST: hub_ip HUB_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 REMOTE_HOST: http://nodeip:5555 GRID_TIMEOUT: 60000 shm_size: "2 GB" # Selen-Chrom-3 Selenium-Chrome-Knoten-3: Bild: Selenium/Node-Chrome Bände: - /dev/shm:/dev/shm Häfen: - „5557:5555“ Neustart: immer stdin_open: wahr Umfeld: HUB_HOST: hub_ip HUB_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 REMOTE_HOST: http://nodeip:5557 GRID_TIMEOUT: 60000 shm_size: "2 GB" # Selen-Chrom-4 Selenium-Chrome-Knoten-4: Bild: Selenium/Node-Chrome Bände: - /dev/shm:/dev/shm Häfen: - „5558:5555“ Neustart: immer stdin_open: wahr Umfeld: HUB_HOST: hub_ip HUB_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 REMOTE_HOST: http://nodeip:5558 GRID_TIMEOUT: 60000 shm_size: "2 GB" # Selen-Chrom-5 Selenium-Chrome-Knoten-5: Bild: Selenium/Node-Chrome Bände: - /dev/shm:/dev/shm Häfen: - „5559:5555“ Neustart: immer stdin_open: wahr Umfeld: HUB_HOST: hub_ip HUB_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 REMOTE_HOST: http://nodeip:5559 GRID_TIMEOUT: 60000 shm_size: "2 GB" Der Befehl zum Starten des Knotens lautet (Voraussetzung ist, dass der Hub vorher gestartet werden muss): $ docker-compose up -d Der Befehl zum Herunterfahren eines Knotens lautet: $ Docker-Compose nach unten Vermächtnis Wenn ich die Selenium Grid-Umgebung auf diese Weise aufbaue, kann der lokale Knoten normal ausgeführt werden, aber beim Remoteknoten tritt häufig eine Zeitüberschreitung auf. Das Knotennetzwerk, das über die Schnittstelle http://hub_ip:4444/grid/console angezeigt wird, ist jedoch vollständig verbunden. Ich habe vorher einige Informationen überprüft und es scheint, dass ich Docker Swarm verwenden muss, ein Docker-Cluster-Verwaltungstool. Es abstrahiert mehrere Docker-Hosts zu einem Ganzen und verwaltet verschiedene Docker-Ressourcen auf diesen Docker-Hosts über einen einheitlichen Eingang. Ich habe es jedoch noch nicht untersucht. Wenn ich zu einer Schlussfolgerung über die Verwendung von Docker Swarm komme, werde ich einen Artikel schreiben und ihn mit Ihnen teilen. Zusammenfassen Es ist sehr praktisch, Docker zum Erstellen einer verteilten Selenium Grid-Umgebung zu verwenden. Grundsätzlich können Sie einen Knoten mit nur einer Befehlszeile starten oder herunterfahren. Ich hoffe, dieser Artikel kann Ihnen einige Ideen liefern und Ihnen bei der Lösung einiger Probleme in Ihrer täglichen Arbeit helfen. Dies ist das Ende dieses Artikels über den praktischen Weg zum Aufbau einer verteilten Selenium-Grid-Umgebung mit Docker. Weitere relevante Inhalte zum Aufbau einer verteilten Selenium-Grid-Umgebung mit Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Fallstudie zum Zusammenführen von JavaScript-Arrays
Einführung in die logische MySQL-Architektur Über...
MySQL 8.0.12 Download- und Installations-Tutorial...
Bei der Gestaltung einer Webseite passieren Desig...
Vorwort: Als Gigant in der IT-Branche ist Microso...
Visual Studio Code ist ein leistungsstarker Texte...
1. Melden Sie sich mit dem IE-Browser beim VPN an...
Wir wissen, dass wir beim Verwenden von HTML im N...
einführen Wenn Sie einen OSS-Speicherdienst wie A...
In Projekten kommt es häufig vor, dass eine Liste...
<br />Seit das Außenministerium und andere z...
Quelle des Problems: Wenn der Slave-Server der ge...
Dieser Artikel fasst hauptsächlich einige häufig ...
Inhaltsverzeichnis 1. Überwachungsport Beziehungs...
Nur den oberen Rand anzeigen <table frame=above...
Die automatische Inkrementierung der Primärschlüs...