Der Prozess der Einrichtung einer Umgebung für Integrationstests mit Remote-Docker

Der Prozess der Einrichtung einer Umgebung für Integrationstests mit Remote-Docker

Nachfragehintergrund

Das Team muss Integrationstests durchführen und dafür auf Middleware wie MySQL und RabbitMQ zurückgreifen. Jeder Entwickler muss Tests schreiben und für den von ihm entwickelten Code Tests ausführen.

Um gegenseitige Störungen zu vermeiden, können Sie Ihre eigene abhängige Umgebung lokal im Forschungs- und Entwicklungszentrum erstellen. Wir hoffen, dass diese Umgebungen einfach, schnell und leicht zu bereinigen sind.

Verwenden Sie Docker, um die Umgebung zu erstellen

Docker kann die oben genannten Anforderungen gut erfüllen.
Aber das ist nicht genug, wir stehen auch vor den folgenden Problemen

  • Der Aufbau der örtlichen Umgebung ist kompliziert. Jedes Forschungs- und Entwicklungsteam muss die Docker-Umgebung lokal installieren, was bei der Nutzung zu einigen Hindernissen und Unannehmlichkeiten führt. Nehmen wir unser Unternehmen als Beispiel. Aufgrund der strengen Netzwerkkontrolle entwickeln wir im Intranet und können keine Verbindung zum Internet herstellen. Insbesondere bei der Installation von Docker unter Windows müssen Sie mit dem Internet verbunden sein. Obwohl es Möglichkeiten gibt, dieses Problem zu lösen, muss jeder Neuling einige mühsame Installations- und Debuggingprozesse in der lokalen Umgebung durchlaufen.
  • Die Geschwindigkeit beim Testlauf kann nicht garantiert werden. Wenn ein Projekt auf viel Middleware basiert, beansprucht der lokale Docker auch viele Ressourcen und beeinträchtigt die Testgeschwindigkeit.
  • Integrationstests in mehreren Umgebungen sind problematisch. Da der Integrationstest auf lokalem Docker basiert, muss Docker in der entsprechenden Umgebung installiert werden, wenn dieser Code gepackt und auf Jenkins ausgeführt wird.

Zusammenfassend lässt sich sagen, dass uns die Verwendung von Docker dabei helfen kann, schnell eine Projektabhängigkeitsumgebung aufzubauen, aber lokalisierte Docker-Abhängigkeiten führen dazu, dass unser Code beim Testen immer noch nicht rein genug ist und jede Betriebsumgebung eine lokale Docker-Installation erfordert.

Verbessern von Integrationstests mit einem zentralen Docker-Server

Tatsächlich bietet Docker selbst einen Remote-Verbindungsmodus, der es uns ermöglicht, Docker zentral bereitzustellen und dann den Testcode zu integrieren, um mithilfe des Docker-Servers über eine TCP-Verbindung abhängige Middleware zu erstellen und zu testen.

Docker Server-Remote-Link-Konfiguration

Am Beispiel von CentOS 7.6 wird in diesem Artikel erklärt, wie ein Docker für die Remoteverbindung konfiguriert wird.

Öffnen Sie den Remote-Verbindungsport in /etc/docker/daemon.json

{"Hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]}

Fügen Sie die Datei /etc/systemd/system/docker.service.d/override.conf hinzu. Wenn der obige Pfad nicht existiert, erstellen Sie ihn manuell.

 [Service]
 ExecStart=
 ExecStart=/usr/bin/dockerd
  • Laden Sie den Daemon-Prozess systemctl daemon-reload
  • Starten Sie den Docker-Container systemctl restart docker.service

Testcontainer-Framework

Nach der Bereitstellung des Remote-Dockers besteht das folgende Problem

  • So stellen Sie eine Verbindung zu einer Remote-Docker-Umgebung her und verwenden sie im Code
  • Wenn zwei Entwickler gleichzeitig Testfälle ausführen, wie können wir sicherstellen, dass die von ihnen gestarteten Container nicht in Konflikt mit den Ports geraten?
  • So reinigen Sie den Behälter nach dem Gebrauch

Glücklicherweise hilft uns das Testcontainer-Framework, die oben genannten Probleme gut zu lösen.

  • Es kann in Junit 4 und Junit 5 integriert werden, um uns beim Starten und Stoppen von Containern zu helfen
  • Bei jedem Testdurchlauf wird ein neuer Container gestartet und es werden unterschiedliche Ports freigegeben, sodass es bei der gleichzeitigen Ausführung von Testfällen durch zwei Entwickler zu keiner gegenseitigen Beeinträchtigung der Umgebungen kommt.
  • Es verwendet Testcontainer/Ryuk, um nicht verwendete Container nach einer angegebenen Verzögerung zu bereinigen.
  • All das oben Genannte ist für den Benutzer transparent.

Mit Spring Boot integrierte Testcontainer

Darüber hinaus bietet das Spieleunternehmen Playtika ein Testframework an, das Testcontainer in Spring Boot integriert https://github.com/Playtika/testcontainers-spring-boot und so das Schreiben von Integrationstests für Anwendungen im Spring Boot- oder Spring Cloud-Ökosystem erleichtert.

Abhängigkeiten von Umgebungsvariablen

Wenn Sie Testcontainer oder Testcontainers-Spring-Boot von Playtika für Remote-Docker-Links verwenden, muss der Docker-Client nicht lokal installiert werden. Allerdings müssen entsprechende Umgebungsvariablen konfiguriert werden, damit der Code die Adresse des Remote-Dockers kennt. Es gibt mehrere Möglichkeiten, diese Adresse zu konfigurieren:

  • Methode 1: Konfiguration der Systemumgebungsvariablen. Konfigurieren Sie die Umgebungsvariable DOCKER_HOST=tcp://remote_docker_server_ip:2375 im aktuellen System
  • Methode 2: Geben Sie direkt im Java-Testcode vor der Erstellung des Containers die Umgebungsvariable über den Code System.setProperty("DOCKER_HOST","tcp://remote_docker_server_ip:2375")
  • Methode 3: Wenn der Integrationstest das Maven Failsafe-Plugin verwendet, konfigurieren Sie die Umgebungsvariablen im Plugin

Docker remote über die Kommandozeile nutzen und verwalten

Der obige Testcode erfordert nicht die Installation des Docker-Clients. Wenn wir Docker jedoch über die Befehlszeile verwalten müssen, können wir einige Docker-Clients installieren, um mit dem Remote-Docker zu kommunizieren. Natürlich entsprechen die oben genannten Testcontainer einer Art Client.

Informationen zu Installationsmethoden für Clientprogramme für verschiedene Betriebssysteme finden Sie unter: https://gist.github.com/kekru/4e6d49b4290a4eebc7b597c07eaf61f2

Verweise

https://www.testcontainers.org/
https://gist.github.com/styblope/dc55e0ad2a9848f2cc3307d4819d819f
https://github.com/Playtika/testcontainers-spring-boot
https://gist.github.com/kekru/4e6d49b4290a4eebc7b597c07eaf61f2

Dies ist das Ende dieses Artikels über die Verwendung von Remote-Docker für Integrationstests. Weitere Informationen zu Docker-Integrationstests 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:
  • Detaillierte Erläuterung der Anwendung von Docker Swarm im kontinuierlichen Integrationstest

<<:  Mit Mailto ist das Senden von E-Mails im HTML-Format ganz einfach

>>:  Vue3 setup() - Erweiterte Verwendungsbeispiele - ausführliche Erklärung

Artikel empfehlen

Docker-Konfiguration Alibaba Cloud Container Service-Betrieb

Konfigurieren des Alibaba Cloud Docker Container ...

Beispielcode zur Implementierung des Regentropfen-Animationseffekts mit CSS

Glasfenster Was wir heute erreichen werden, ist d...

Mysql | Detaillierte Erklärung der Fuzzy-Abfrage mit Platzhaltern (wie, %, _)

Wildcard-Kategorien: %Prozent-Platzhalter: Gibt a...

Verwendung des SerialPort-Moduls in Node.js

Inhaltsverzeichnis Zweck Modulinstallation Grundl...

5 Lösungen für den CSS-Box-Zusammenbruch

Zunächst: Was ist ein Box-Collapse? Elemente, die...

So legen Sie MySQL-Fremdschlüssel für Anfänger fest

Inhaltsverzeichnis Die Rolle von Fremdschlüsseln ...

Zusammenfassung der Grundsätze zum Schreiben von HTML-Seiten für E-Mails

Da HTML-E-Mail keine unabhängige HOST-Seite auf di...

Detaillierte Erklärung des JavaScript-Prototyps und Beispiele

Inhaltsverzeichnis Die Beziehung zwischen der Kon...

Der Unterschied zwischen MySQL count(1), count(*) und count(field)

Inhaltsverzeichnis 1. Erster Blick auf COUNT 2. D...

Mysql behält den vorhandenen Inhalt bei und fügt später Inhalte hinzu

Dieser Befehl ändert die Datentabelle ff_vod und ...

Beispielanalyse der MySQL-Indexabdeckung

Dieser Artikel beschreibt die MySQL-Indexabdeckun...