DevOps-Tools sind nicht nur für DevOps gedacht. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf neu

Teil 1: Web / Android


Hinweis : Dieser Artikel ist eine Übersetzung des Originalartikels „DevOps-Tools sind nicht nur für DevOps ins Russische  . Aufbau einer Testautomatisierungsinfrastruktur von Grund auf neu. " Alle Abbildungen, Links, Zitate und Begriffe werden jedoch in der Originalsprache gespeichert, um Bedeutungsverzerrungen bei der Übersetzung ins Russische zu vermeiden. Ich wünsche Ihnen ein angenehmes Studium!



Derzeit ist die DevOps-Spezialität eine der beliebtesten in der IT-Branche. Wenn Sie beliebte Websites für die Jobsuche öffnen und einen Gehaltsfilter festlegen, werden Jobs im Zusammenhang mit DevOps ganz oben auf der Liste angezeigt. Es ist jedoch wichtig zu verstehen, dass sich dies hauptsächlich auf die Position des „Senioren“ bezieht, was bedeutet, dass der Kandidat über ein hohes Maß an Fähigkeiten, Kenntnissen über Technologien und Werkzeuge verfügt. Es bringt auch ein hohes Maß an Verantwortung mit sich, das mit dem reibungslosen Betrieb der Produktion verbunden ist. Wir begannen jedoch zu vergessen, was DevOps ist. Anfangs war es keine bestimmte Person oder Abteilung. Wenn wir nach den Definitionen dieses Begriffs suchen, werden wir viele schöne und korrekte Substantive finden, wie Methodik, Praktiken, Kulturphilosophie, eine Gruppe von Konzepten und so weiter.

Meine Spezialisierung ist ein QS-Automatisierungsingenieur, aber ich glaube, dass dies nicht nur mit dem Schreiben von Autotests oder der Entwicklung einer Architektur für ein Testframework zusammenhängen sollte. Im Jahr 2020 sind auch Kenntnisse der Automatisierungsinfrastruktur erforderlich. Auf diese Weise können Sie den Automatisierungsprozess selbst organisieren, vom Start der Tests bis zur Bereitstellung der Ergebnisse für alle interessierten Parteien gemäß den Zielen. Daher sind DevOps-Kenntnisse ein Muss für diesen Job. Und das alles ist gut, aber leider gibt es ein Problem ( Spoiler: Dieser Artikel versucht, dieses Problem zu vereinfachen) Es liegt in der Tatsache, dass DevOps kompliziert ist. Und das ist offensichtlich, weil Unternehmen nicht viel für das bezahlen, was einfach zu tun ist ... In der Welt von DevOps gibt es eine große Anzahl von Tools, Begriffen und Praktiken, die beherrscht werden müssen. Dies ist zu Beginn einer Karriere besonders schwierig und hängt von der gesammelten technischen Erfahrung ab.


Quelle: http://maximelanciauxbi.blogspot.com/2017/04/devops-tools.html

Hier werden wir wahrscheinlich den einleitenden Teil vervollständigen und uns auf den Zweck dieses Artikels konzentrieren. 

Wovon handelt der Artikel


In diesem Artikel werde ich meine Erfahrungen beim Aufbau einer Testautomatisierungsinfrastruktur teilen. Im Internet finden Sie viele Informationsquellen zu verschiedenen Tools und deren Verwendung. Ich möchte sie jedoch ausschließlich im Zusammenhang mit der Automatisierung betrachten. Ich glaube, dass viele Automatisierungsingenieure mit einer Situation vertraut sind, in der niemand außer Ihnen die entwickelten Tests durchführt und sich nicht um ihre Unterstützung kümmert. Infolgedessen sind die Tests veraltet und Sie müssen Zeit damit verbringen, sie zu aktualisieren. Auch zu Beginn einer Karriere kann dies eine ziemlich schwierige Aufgabe sein: richtig zu entscheiden, welche Tools zur Lösung dieses Problems beitragen sollen, wie sie ausgewählt, konfiguriert und gewartet werden. Einige Tester bitten DevOps (Personen) um Hilfe, und um ehrlich zu sein, funktioniert dieser Ansatz.In vielen Fällen ist dies möglicherweise die einzige Option, da nicht alle Abhängigkeiten sichtbar sind. Wie wir wissen, sind DevOps jedoch sehr beschäftigt, da sie je nach Organisation / Team über die Infrastruktur des gesamten Unternehmens, die Bereitstellung, Überwachung, Microservices und ähnliche Aufgaben nachdenken sollten. Wie üblich hat die Automatisierung keine Priorität. In diesem Fall sollten wir versuchen, von Anfang bis Ende unser Bestes zu geben. Dies reduziert Abhängigkeiten, beschleunigt den Workflow, verbessert unsere Fähigkeiten und ermöglicht es uns, ein umfassenderes Bild davon zu erhalten, was passiert.Microservices und ähnliche Aufgaben je nach Organisation / Team. Wie üblich hat die Automatisierung keine Priorität. In diesem Fall sollten wir versuchen, von Anfang bis Ende unser Bestes zu geben. Dies reduziert Abhängigkeiten, beschleunigt den Workflow, verbessert unsere Fähigkeiten und ermöglicht es uns, ein umfassenderes Bild davon zu erhalten, was passiert.Microservices und ähnliche Aufgaben je nach Organisation / Team. Wie üblich hat die Automatisierung keine Priorität. In diesem Fall sollten wir versuchen, von Anfang bis Ende unser Bestes zu geben. Dies reduziert Abhängigkeiten, beschleunigt den Workflow, verbessert unsere Fähigkeiten und ermöglicht es uns, ein umfassenderes Bild davon zu erhalten, was passiert.

Der Artikel stellt die beliebtesten und beliebtesten Tools vor und zeigt, wie Sie sie für den schrittweisen Aufbau der Automatisierungsinfrastruktur verwenden können. Jede Gruppe wird durch Tools dargestellt, die auf persönliche Erfahrungen getestet wurden. Dies bedeutet jedoch nicht, dass Sie dasselbe verwenden sollten. Die Werkzeuge selbst sind nicht wichtig, sie erscheinen und sind veraltet. Unsere technische Aufgabe ist es, die Grundprinzipien zu verstehen: Warum brauchen wir diese Gruppe von Werkzeugen und welche Arbeitsaufgaben können wir mit ihrer Hilfe lösen? Daher hinterlasse ich am Ende jedes Abschnitts Links zu ähnlichen Tools, die in Ihrer Organisation verwendet werden können.

Was ist nicht in diesem Artikel


Auch in diesem Artikel geht es nicht um bestimmte Tools, daher werden keine Code-Einfügungen aus der Dokumentation und den Beschreibungen bestimmter Befehle vorgenommen. Aber am Ende jedes Abschnitts hinterlasse ich Links für eine detaillierte Studie.

Dies liegt an der Tatsache, dass: 

  • Dieses Material ist in verschiedenen Quellen (Dokumentation, Bücher, Videokurse) sehr leicht zu finden.
  • Wenn wir anfangen, tiefer zu gehen, müssen wir 10, 20, 30 Teile dieses Artikels schreiben (während Pläne 2-3);
  • Ich möchte nur nicht Ihre Zeit verschwenden, weil Sie vielleicht andere Tools verwenden möchten, um die gleichen Ziele zu erreichen.

Trainieren


Ich möchte wirklich, dass dieses Material für jeden Leser nützlich ist und nicht nur gelesen und vergessen wird. In jeder Studie ist die Praxis ein sehr wichtiger Bestandteil. Zu diesem Zweck habe ich ein GitHub-Repository mit einer schrittweisen Anleitung vorbereitet, wie man alles von Grund auf neu macht . Sie werden auch auf Hausaufgaben warten, um sicherzugehen, dass Sie nicht gedankenlos Zeilen ausgeführter Befehle kopiert haben

Planen


SchrittTechnologieWerkzeuge
1Lokale Ausführung (Web- / Android-Demo-Tests vorbereiten und lokal ausführen) Node.js, Selen, Appium
2Versionskontrollsysteme Git
3ContainerisierungDocker, Selenium-Gitter, Selenoid (Web, Android)
4CI / CDGitlab ci
5Cloud-PlattformenGoogle Cloud-Plattform
6OrchestrierungKubernetes
7Infrastruktur als Code (IaC)Terraform, ansible

Die Struktur jedes Abschnitts


Um die Erzählung in visueller Form zu halten, wird jeder Abschnitt wie folgt beschrieben:

  • ,
  • ,
  • ,
  • ,
  • .

1.



Dies ist nur ein vorbereitender Schritt, um die Demo-Tests lokal auszuführen und zu überprüfen, ob sie erfolgreich bestanden wurden. Im praktischen Teil wird Node.js verwendet, aber die Programmiersprache und die Plattform sind auch nicht wichtig und Sie können diejenigen verwenden, die in Ihrem Unternehmen verwendet werden. 

Als Automatisierungstool empfehle ich jedoch die Verwendung von Selenium WebDriver für Webplattformen bzw. Appium für die Android-Plattform, da in den nächsten Schritten Docker-Images verwendet werden, die speziell für die Verwendung mit diesen Tools entwickelt wurden. In Bezug auf die Anforderungen an offene Stellen sind diese Tools auf dem Markt am gefragtesten.

Wie Sie vielleicht bemerkt haben, berücksichtigen wir nur Web- und Android-Tests. Leider ist iOS eine ganz andere Geschichte (dank Apple). Ich plane, die Lösungen und Praktiken in Bezug auf iOS in den folgenden Teilen zu demonstrieren.

Wert für die Automatisierungsinfrastruktur


Aus infrastruktureller Sicht hat ein lokaler Start keinen Wert. Sie überprüfen nur, ob die Tests auf dem lokalen Computer in lokalen Browsern und Simulatoren ausgeführt werden. In jedem Fall ist dies jedoch ein notwendiger Ausgangspunkt.

Darstellung des aktuellen Standes der Infrastruktur




Links lernen



Ähnliche Werkzeuge


  • jede Programmiersprache, die Sie in Verbindung mit Selenium / Appium-Tests mögen;
  • irgendwelche Tests;
  • jeder Testläufer.

2. Versionskontrollsysteme (Git)


Technologie Brief


Es wird für niemanden eine große Entdeckung sein, wenn ich sage, dass das Versionskontrollsystem ein äußerst wichtiger Teil der Entwicklung sowohl als Team als auch individuell ist. Basierend auf verschiedenen Quellen können wir zuversichtlich sagen, dass Git der beliebteste Vertreter ist. Das Versionskontrollsystem bietet viele Vorteile, wie z. B. Codeaustausch, Versionsspeicherung, Wiederherstellung früherer Zweige, Überwachung des Projektverlaufs und Sicherungen. Wir werden nicht auf jeden Punkt im Detail eingehen, da ich sicher bin, dass Sie damit vertraut sind und ihn in der täglichen Arbeit verwenden. Wenn dies plötzlich nicht mehr der Fall ist, empfehle ich, die Lektüre dieses Artikels anzuhalten und diese Lücke so schnell wie möglich zu füllen.

Wert für die Automatisierungsinfrastruktur


Und hier können Sie eine vernünftige Frage stellen: „Warum erzählt er uns von Git? Jeder kennt und verwendet dies sowohl für Entwicklungscode als auch für Auto-Test-Code. “ Sie werden absolut Recht haben, aber in diesem Artikel sprechen wir über Infrastruktur und dieser Abschnitt spielt die Rolle einer Vorschau für Abschnitt 7: „Infrastruktur als Code (IaC)“. Für uns bedeutet dies, dass die gesamte Infrastruktur, einschließlich der Testinfrastruktur, in Form von Code beschrieben wird, sodass wir auch Versionsverwaltungssysteme darauf anwenden und ähnliche Vorteile sowohl für Entwicklungs- als auch für Automatisierungscode erzielen können.

Wir werden IaC in Schritt 7 genauer betrachten, aber Sie können Git auch jetzt lokal verwenden, indem Sie ein lokales Repository erstellen. Das Gesamtbild wird erweitert, wenn wir der Infrastruktur ein Remote-Repository hinzufügen.

Darstellung des aktuellen Standes der Infrastruktur




Links lernen



Ähnliche Werkzeuge



3. Containerisierung (Docker)


Technologie Brief


Um zu demonstrieren, wie die Containerisierung die Spielregeln verändert hat, gehen wir einige Jahrzehnte zurück. In jenen Tagen kauften und verwendeten die Leute Server-Maschinen, um Anwendungen auszuführen. In den meisten Fällen waren die für den Start erforderlichen Ressourcen jedoch nicht im Voraus bekannt. Infolgedessen gaben Unternehmen Geld für den Kauf teurer leistungsfähiger Server aus, aber einige dieser Kapazitäten wurden nicht vollständig genutzt.

Die nächste Evolutionsstufe waren virtuelle Maschinen (VMs), die das Problem lösten, Geld für nicht genutzte Ressourcen auszugeben. Diese Technologie ermöglichte es, Anwendungen unabhängig voneinander auf demselben Server auszuführen und vollständig isolierten Speicherplatz zuzuweisen. Leider hat jede Technologie ihre Nachteile. Das Starten einer VM erfordert ein vollwertiges Betriebssystem, das CPU, RAM, Speicher verbraucht. Je nach Betriebssystem müssen Sie die Kosten einer Lizenz berücksichtigen. Diese Faktoren wirken sich auf die Download-Geschwindigkeit aus und erschweren die Portabilität.

Und so kamen wir zur Containerisierung. Diese Technologie löste erneut das vorherige Problem, da die Container kein vollwertiges Betriebssystem verwenden, wodurch Sie eine große Anzahl von Ressourcen freisetzen können und eine schnelle und flexible Lösung für die Portabilität bieten.

Natürlich ist die Containerisierungstechnologie nicht neu und wurde erstmals Ende der 70er Jahre eingeführt. In jenen Tagen gab es viele Forschungen, Grundlagen und Versuche. Aber es war Docker, der diese Technologie anpasste und sie für die Massen leicht zugänglich machte. Wenn wir heutzutage über Container sprechen, meinen wir in den meisten Fällen Docker. Wenn wir über Docker-Container sprechen, meinen wir Linux-Container. Wir können Windows- und MacOS-Systeme verwenden, um Container auszuführen. Es ist jedoch wichtig zu verstehen, dass in diesem Fall eine zusätzliche Ebene angezeigt wird. Beispielsweise startet Docker auf einem Mac unbeaufsichtigt Container in einer leichten Linux-VM. Wir werden auf dieses Thema zurückkommen, wenn wir den Start von Android-Emulatoren in Containern diskutieren. Hier erscheint eine sehr wichtige Nuance, die genauer analysiert werden muss.

Wert für die Automatisierungsinfrastruktur


Wir haben herausgefunden, dass Containerisierung und Docker cool sind. Betrachten wir dies im Kontext der Automatisierung, da jedes Werkzeug oder jede Technologie ein Problem lösen sollte. Lassen Sie uns die offensichtlichen Probleme der Testautomatisierung im Zusammenhang mit UI-Tests bezeichnen:

  • eine große Anzahl von Abhängigkeiten bei der Installation von Selen und insbesondere von Appium;
  • Kompatibilitätsprobleme zwischen Versionen von Browsern, Simulatoren und Treibern;
  • Mangel an isoliertem Speicherplatz für Browser / Simulatoren, was besonders für den parallelen Start wichtig ist;
  • Es ist schwierig zu verwalten und zu warten, wenn Sie 10, 50, 100 oder sogar 1000 Browser gleichzeitig ausführen müssen.

Da Selenium jedoch das beliebteste Automatisierungstool und Docker das beliebteste Containerisierungstool ist, sollte es niemanden überraschen, dass jemand versucht hat, sie zu kombinieren, um ein leistungsstarkes Tool zur Lösung der oben genannten Probleme zu erhalten. Lassen Sie uns solche Lösungen genauer betrachten. 

Selengitter im Hafen

Dieses Tool ist das beliebteste in der Welt von Selenium zum Starten und Verwalten mehrerer Browser auf mehreren Computern von einem zentralen Standort aus. Zu Beginn müssen Sie mindestens 2 Teile registrieren: Hub und Knoten. Ein Hub ist ein zentraler Standort, der alle Anforderungen von Tests empfängt und an die entsprechenden Knoten verteilt. Für jeden Knoten können wir eine bestimmte Konfiguration konfigurieren, z. B. den gewünschten Browser und seine Version. Wir müssen uns jedoch weiterhin selbst um kompatible Browsertreiber kümmern und diese auf den erforderlichen Knoten installieren. Aus diesem Grund wird das Selenium-Grid nicht in seiner reinen Form verwendet, es sei denn, wir müssen mit Browsern arbeiten, die unter Linux nicht installiert werden können.In allen anderen Fällen ist die Verwendung eines Docker-Images zum Ausführen des Selenium Grid Hub und der Knoten eine sehr flexible und korrekte Lösung. Dieser Ansatz vereinfacht die Verwaltung von Knoten erheblich, da wir das benötigte Image mit bereits installierten kompatiblen Versionen von Browsern und Treibern auswählen können.

Trotz der negativen Rückkopplung auf die Stabilität, insbesondere wenn eine große Anzahl von Knoten parallel ausgeführt wird, ist das Selen-Gitter immer noch das beliebteste Werkzeug, um Selen-Tests parallel auszuführen. Es ist wichtig zu beachten, dass in Open Source ständig verschiedene Verbesserungen und Modifikationen dieses Tools auftreten, die mit verschiedenen Engpässen zu kämpfen haben.

Selenoid für Web

Dieses Tool ist ein Durchbruch in der Selenium-Welt, da es sofort einsatzbereit ist und vielen Automatisierungsingenieuren das Leben erheblich erleichtert hat. Erstens ist dies keine weitere Modifikation des Selen-Gitters. Stattdessen erstellten die Entwickler eine völlig neue Version von Selenium Hub in der Sprache Golang, die in Verbindung mit leichtgewichtigen Docker-Bildern für verschiedene Browser Impulse für die Entwicklung der Testautomatisierung gab. Darüber hinaus müssen wir im Fall von Selenium Grid alle erforderlichen Browser und ihre Versionen im Voraus ermitteln, was bei der Arbeit mit nur einem Browser kein Problem darstellt. Bei mehreren unterstützten Browsern ist Selenoid dank der Funktion "Browser on Demand" die Lösung Nummer eins. Alles, was von uns verlangt wird, ist, die erforderlichen Bilder mit Browsern vorzuladen und die Konfigurationsdatei zu aktualisieren.mit dem Selenoid interagiert. Nachdem Selenoid eine Anfrage von den Tests erhalten hat, startet es automatisch den richtigen Container mit dem richtigen Browser. Wenn der Test abgeschlossen ist, löscht Selenoid den Container und gibt Ressourcen für die folgenden Abfragen frei. Dieser Ansatz beseitigt das bekannte Problem der "Knotenverschlechterung", das wir häufig im Selen-Gitter sehen, vollständig.

Aber leider ist Selenoid immer noch keine Silberkugel. Wir haben die On-Demand-Browserfunktion, aber die On-Demand-Ressourcenfunktion ist immer noch nicht verfügbar. Um Selenoid verwenden zu können, müssen wir es auf einer physischen Hardware oder VM bereitstellen. Dies bedeutet, dass wir im Voraus wissen müssen, wie viele Ressourcen zugewiesen werden müssen. Ich glaube, dies ist kein Problem für kleine Projekte, auf denen 10, 20 oder sogar 30 Browser parallel ausgeführt werden. Aber was ist, wenn wir 100, 500, 1000 und mehr brauchen? Es macht keinen Sinn, ständig so viele Ressourcen zu warten und zu bezahlen. In den Abschnitten 5 und 6 dieses Artikels werden Lösungen erläutert, mit denen Sie skalieren und so die Unternehmenskosten erheblich senken können.

Selenoid für Android

Nach dem Erfolg von Selenoid als Tool für die Webautomatisierung wollten die Leute etwas Ähnliches für Android. Und es passierte - Selenoid wurde mit Android-Unterstützung veröffentlicht. Aus der Sicht eines Benutzers auf hoher Ebene ähnelt das Funktionsprinzip der Webautomatisierung. Der einzige Unterschied besteht darin, dass Selenoid anstelle von Containern mit Browsern Container mit Android-Emulatoren startet. Meiner Meinung nach ist es heute das leistungsstärkste kostenlose Tool, um Android-Tests parallel auszuführen.

Ich möchte wirklich nicht über die negativen Aspekte dieses Tools sprechen, da es mir sehr gut gefällt. Dennoch gibt es die gleichen Nachteile in Bezug auf die Webautomatisierung in Bezug auf die Skalierung. Darüber hinaus müssen wir über eine weitere Einschränkung sprechen, die überraschend sein kann, wenn wir das Instrument zum ersten Mal stimmen. Zum Ausführen von Android-Images benötigen wir eine physische Maschine oder VM mit Unterstützung für verschachtelte Virtualisierung. In der praktischen Anleitung zeige ich, wie dies auf einer Linux-VM aktiviert wird. Wenn Sie jedoch ein MacOS-Benutzer sind und Selenoid lokal bereitstellen möchten, können Android-Tests nicht ausgeführt werden. Sie können die Linux-VM jedoch jederzeit lokal mit der konfigurierten 'verschachtelten Virtualisierung' starten und Selenoid darin bereitstellen.

Darstellung des aktuellen Standes der Infrastruktur


Im Kontext dieses Artikels werden wir zwei Tools hinzufügen, um die Infrastruktur zu veranschaulichen. Dies sind Selenium Grid für Webtests und Selenoid für Android-Tests. Im GitHub-Handbuch werde ich auch zeigen, wie Selenoid zum Ausführen von Webtests verwendet wird. 



Links lernen



Ähnliche Werkzeuge


  • Es gibt andere Containerisierungstools, aber Docker ist das beliebteste. Wenn Sie etwas anderes ausprobieren möchten, denken Sie daran, dass die Tools, die wir für die parallele Ausführung von Selenium-Tests überprüft haben, nicht sofort funktionieren.  
  • Wie bereits erwähnt, gibt es viele Modifikationen des Selengitters , beispielsweise Zalenium .

4. CI / CD


Technologie Brief


Die Praxis der kontinuierlichen Integration ist in der Entwicklung sehr beliebt und steht Versionskontrollsystemen in nichts nach. Trotzdem habe ich das Gefühl, dass die Terminologie verwirrend ist. In diesem Abschnitt möchte ich 3 Modifikationen dieser Technologie aus meiner Sicht beschreiben. Im Internet finden Sie viele Artikel mit unterschiedlichen Interpretationen, und es ist absolut normal, wenn Ihre Meinung anders ist. Das Wichtigste ist, dass Sie sich auf der gleichen Wellenlänge wie Ihre Kollegen befinden.

Es gibt also drei Begriffe: CI - Continuous Integration (CD), CD - Continuous Delivery (CD) und erneut CD - Continuous Deployment (CD). ( Weiter werde ich diese Begriffe in Englisch verwenden) Mit jeder Änderung werden Ihrer Entwicklungspipeline einige zusätzliche Schritte hinzugefügt. Aber das Wort kontinuierlich ist das wichtigste. In diesem Zusammenhang meinen wir etwas, das von Anfang bis Ende ohne Unterbrechung oder manuelle Belichtung geschieht. Schauen wir uns in diesem Zusammenhang CI & CD und CD an.

  • Kontinuierliche Integration ist der erste Schritt in der Evolution. Nach dem Senden des neuen Codes an den Server erwarten wir ein schnelles Feedback, dass mit unseren Änderungen alles in Ordnung ist. In der Regel umfasst CI den Start von Tools zur Analyse statischen Codes und Unit- / internen API-Tests. Auf diese Weise können Sie einige Sekunden / Minuten später Informationen zu unserem Code abrufen.
  • Continuous Delivery , /UI-. , CI. -, . -, test/staging — . , , .
  • Continuous Deployment , (release) production, . release , smoke — production . Continuous Deployment . - , , Continuous (). , Continuous Delivery.


In diesem Abschnitt muss ich klarstellen, dass wenn wir über End-to-End-UI-Tests sprechen, dies bedeutet, dass wir unsere Änderungen und zugehörigen Services in Testumgebungen bereitstellen müssen. Kontinuierliche Integration - Der Prozess ist für diese Aufgabe nicht anwendbar, und wir müssen darauf achten, mindestens kontinuierliche Bereitstellungspraktiken zu implementieren. Die kontinuierliche Bereitstellung ist auch im Zusammenhang mit UI-Tests sinnvoll, wenn sie in der Produktion ausgeführt werden sollen.

Bevor wir uns die Illustration des Architekturwechsels ansehen, möchte ich noch ein paar Worte zu GitLab CI sagen. Im Gegensatz zu anderen CI / CD-Tools bietet GitLab ein Remote-Repository und viele andere erweiterte Funktionen. GitLab ist also mehr als CI. Es umfasst eine sofort einsatzbereite Quellcodeverwaltung, agiles Management, CI / CD-Pipelines, Protokollierungstools und die Erfassung von Metriken. Die GitLab-Architektur besteht aus Gitlab CI / CD und GitLab Runner. Ich gebe eine kurze Beschreibung von der offiziellen Seite:
Gitlab CI / CD ist eine Webanwendung mit einer API, die ihren Status in einer Datenbank speichert, Projekte / Builds verwaltet und eine Benutzeroberfläche bereitstellt. GitLab Runner ist eine Anwendung, die Builds verarbeitet. Es kann separat bereitgestellt werden und funktioniert mit GitLab CI / CD über eine API. Für laufende Tests benötigen Sie sowohl die Gitlab-Instanz als auch Runner.








5.



In diesem Abschnitt werden wir über einen beliebten Trend namens "Public Clouds" sprechen. Trotz der enormen Vorteile, die die oben beschriebenen Virtualisierungs- und Containerisierungstechnologien bieten, benötigen wir weiterhin Rechenressourcen. Unternehmen kaufen teure Server oder mieten Rechenzentren. In diesem Fall müssen jedoch (manchmal unrealistisch) berechnet werden, wie viele Ressourcen wir benötigen, ob wir sie rund um die Uhr nutzen und für welche Zwecke. Für die Produktion ist beispielsweise ein Server erforderlich, der rund um die Uhr läuft. Benötigen wir jedoch ähnliche Ressourcen zum Testen nach Stunden? Dies hängt auch von der Art der durchgeführten Tests ab. Ein Beispiel wären Stress / Stresstests, die wir nach Stunden durchführen möchten, um am nächsten Tag Ergebnisse zu erzielen. Aber auf jeden FallEine 24-Stunden-Serververfügbarkeit ist für End-to-End-Autotests und insbesondere für manuelle Testumgebungen nicht erforderlich. In solchen Situationen wäre es gut, bei Bedarf so viele Ressourcen wie nötig zu erhalten, sie zu nutzen und nicht mehr zu zahlen, wenn sie nicht mehr benötigt werden. Darüber hinaus wäre es schön, sie sofort zu erhalten, indem Sie ein paar Mausklicks machen oder ein paar Skripte ausführen. Hierzu werden öffentliche Clouds verwendet. Schauen wir uns die Definition an:Hierzu werden öffentliche Clouds verwendet. Schauen wir uns die Definition an:Hierzu werden öffentliche Clouds verwendet. Schauen wir uns die Definition an:
„Die öffentliche Cloud ist definiert als Computerdienste, die von Drittanbietern über das öffentliche Internet angeboten werden und jedem zur Verfügung stehen, der sie nutzen oder kaufen möchte. "Sie können kostenlos sein oder bei Bedarf verkauft werden, sodass Kunden nur pro Nutzung für die von ihnen verbrauchten CPU-Zyklen, den Speicher oder die Bandbreite bezahlen können."

Es gibt eine Meinung, dass öffentliche Clouds teuer sind. Ihre Schlüsselidee ist es jedoch, die Unternehmenskosten zu senken. Wie bereits erwähnt, können Sie mit öffentlichen Clouds Ressourcen bei Bedarf abrufen und nur für die Zeit bezahlen, in der sie verwendet werden. Manchmal vergessen wir auch, dass Mitarbeiter bezahlt werden, und Spezialisten sind auch eine teure Ressource. Beachten Sie, dass öffentliche Clouds die Unterstützung der Infrastruktur erheblich erleichtern, sodass sich Ingenieure auf wichtigere Aufgaben konzentrieren können. 

Wert für die Automatisierungsinfrastruktur


Welche spezifischen Ressourcen benötigen wir für End-to-End-UI-Tests? Hierbei handelt es sich hauptsächlich um virtuelle Maschinen oder Cluster (wir werden im nächsten Abschnitt auf Kubernetes eingehen), um Browser und Emulatoren zu starten. Je mehr Browser und Emulatoren gleichzeitig ausgeführt werden sollen, desto mehr CPU und Speicher werden benötigt und desto mehr Geld müssen wir dafür bezahlen. Öffentliche Clouds im Rahmen der Testautomatisierung ermöglichen es uns daher, eine große Anzahl (100, 200, 1000 ...) von Browsern / Emulatoren bei Bedarf zu starten, Testergebnisse so schnell wie möglich zu erhalten und nicht mehr für solch wahnsinnig ressourcenintensive Kapazitäten zu zahlen. 

Die beliebtesten Cloud-Anbieter sind Amazon Web Services (AWS), Microsoft Azure und Google Cloud Platform (GCP). Das praktische Handbuch enthält Beispiele für die Verwendung von GCP. Im Allgemeinen spielt es jedoch keine Rolle, was Sie für Automatisierungsaufgaben verwenden. Alle bieten ungefähr die gleiche Funktionalität. Bei der Auswahl eines Anbieters konzentriert sich das Management in der Regel auf die gesamte Infrastruktur und die Geschäftsanforderungen des Unternehmens, die über den Rahmen dieses Artikels hinausgehen. Für Automatisierungsingenieure wird es interessanter sein, die Verwendung von Cloud-Anbietern zu vergleichen, die Cloud-Plattformen speziell für Testzwecke wie Sauce Labs, BrowserStack, BitBar usw. verwenden. Also lass uns das Gleiche tun! Meiner Meinung nach ist Sauce Labs die bekannteste Cloud-Testfarm, daher habe ich sie zum Vergleich herangezogen. 

GCP vs. Sauce Labs für die Automatisierung:

Stellen Sie sich vor, wir müssen 8 Webtests und 8 Android-Tests gleichzeitig ausführen. Dazu verwenden wir GCP und führen 2 virtuelle Maschinen mit Selenoid aus. Am ersten werden wir 8 Container mit Browsern erhöhen. Auf der zweiten - 8 Container mit Emulatoren. Werfen wir einen Blick auf die Preise:  


Um einen Container mit Chrome auszuführen, benötigen wir einen n1-Standard-1- Computer. Im Fall von Android ist dies n1-Standard-4 für einen Emulator. Eine flexiblere und kostengünstigere Möglichkeit besteht darin, bestimmte Benutzerwerte für CPU / Speicher festzulegen. Derzeit ist dies jedoch für den Vergleich mit Sauce Labs nicht wichtig.

Und hier sind die Preise für die Verwendung von Sauce Labs:


Ich nehme an, Sie haben den Unterschied bereits bemerkt, aber ich werde trotzdem eine Tabelle mit den Berechnungen für unsere Aufgabe geben:

Benötigte RessourcenMontlyArbeitszeit (8 - 20 Uhr)Arbeitszeit + Preemptible
Gcp für Webn1-Standard-1 x 8 = n1-Standard-8194,18 USD23 Tage * 12h * 0,38 = 104,88 $ 23 Tage * 12h * 0,08 = 22,08 $
Sauce Labs für das WebParallele Virtual Cloud8-Tests$ 1,559- -- -
GCP für Androidn1-Standard-4 x 8: n1-Standard-16$ 776,7223 Tage * 12 Stunden * 1,52 = 419,52 USD 23 Tage * 12h * 0,32 = 88,32 $
Sauce Labs für AndroidParallele Tests der Real Device Cloud 81,999 $- -- -

Wie Sie sehen, ist der Kostenunterschied enorm, insbesondere wenn Sie die Tests nur innerhalb von zwölf Stunden durchführen. Sie können die Kosten jedoch weiter senken, indem Sie präemptible Maschinen verwenden. Was ist es?
A preemptible VM is an instance that you can create and run at a muchower price than normal instances. However, Compute Engine might terminate (preempt) these instances if it requires access to those resources for other tasks. Preemptible instances are excess Compute Engine capacity, so their availability varies with usage.

If your apps are fault-tolerant and can withstand possible instance preemptions, then preemptible instances can reduce your Compute Engine costs significantly. For example, batch processing jobs can run on preemptible instances. If some of those instances terminate during processing, the job slows but does not completely stop. Preemptible instances complete your batch processing tasks without placing additional workload on your existing instances and without requiring you to pay full price for additional normal instances.

Und das ist noch nicht das Ende! Ich bin mir sicher, dass niemand 12 Stunden lang ohne Pause Tests durchführt. In diesem Fall können Sie virtuelle Maschinen automatisch starten und stoppen, wenn sie nicht benötigt werden. Die tatsächliche Nutzungsdauer kann auf 6 Stunden pro Tag sinken. Dann wird die Zahlung im Rahmen unserer Aufgabe für 8 Browser um bis zu 11 USD pro Monat gesenkt. Ist das nicht perfekt? Bei präemptiblen Maschinen müssen wir jedoch vorsichtig und auf Unterbrechungen und instabilen Betrieb vorbereitet sein, obwohl diese Situationen programmgesteuert bereitgestellt und verarbeitet werden können. Das ist es wert!

Aber ich sage auf keinen Fall "Verwenden Sie niemals Cloud-Testfarmen". Sie haben mehrere Vorteile. Erstens ist dies nicht nur eine virtuelle Maschine, sondern eine Komplettlösung zum Testen der Automatisierung mit einer Reihe von sofort einsatzbereiten Funktionen: Fernzugriff, Protokolle, Screenshots, Videoaufzeichnung, verschiedene Browser und physische Mobilgeräte. In vielen Situationen kann dies eine unverzichtbare schicke Alternative sein. Insbesondere Testplattformen sind für die IOS-Automatisierung nützlich, wenn öffentliche Clouds nur Linux / Windows-Systeme anbieten können. Aber über iOS wird in zukünftigen Artikeln gesprochen. Ich empfehle, immer die Situation zu betrachten und von Aufgaben auszugehen: In einigen ist es billiger und effizienter, öffentliche Clouds zu verwenden, und in einigen Testplattformen ist es definitiv das ausgegebene Geld wert.

Darstellung des aktuellen Standes der Infrastruktur




Links lernen



Ähnliche Tools:



6. Orchestrierung


Technologie Brief


Ich habe gute Nachrichten - wir haben fast das Ende des Artikels erreicht! Derzeit besteht unsere Automatisierungsinfrastruktur aus Web- und Android-Tests, die wir parallel über GitLab CI ausführen, wobei Tools mit Docker-Unterstützung verwendet werden: Selenium Grid und Selenoid. Darüber hinaus verwenden wir über GCP erstellte virtuelle Maschinen, um Container mit Browsern und Emulatoren zu heben. Um die Kosten zu senken, starten wir diese virtuellen Maschinen nur bei Bedarf und stoppen sie, wenn keine Tests durchgeführt werden. Gibt es noch etwas, das unsere Infrastruktur verbessern kann? Die Antwort ist ja! Treffen Sie Kubernetes (K8s)!

Überlegen Sie zunächst, wie die Wörter Orchestrierung, Cluster und Kubernetes zusammenhängen. Auf hoher Ebene ist Orchestrierung ein System, das Anwendungen bereitstellt und verwaltet. Zur Automatisierung von Tests sind solche containerisierten Anwendungen Selenium Grid und Selenoid. Docker und K8 ergänzen sich. Die erste wird zum Bereitstellen von Anwendungen verwendet, die zweite zum Orchestrieren. K8s ist wiederum ein Cluster. Die Aufgabe des Clusters besteht darin, VMs als Knoten zu verwenden, mit denen Sie verschiedene Funktionen, Programme und Dienste auf einem Server (Cluster) installieren können. Wenn einer der Knoten abstürzt, werden andere Knoten aufgenommen, wodurch sichergestellt wird, dass unsere Anwendung reibungslos ausgeführt wird. Darüber hinaus verfügt K8s über wichtige Funktionen im Zusammenhang mit der Skalierung.Dank dessen erhalten wir automatisch die optimale Menge an Ressourcen, basierend auf der Auslastung und den festgelegten Einschränkungen.

In Wahrheit ist die manuelle Bereitstellung von Kubernetes von Grund auf keine völlig triviale Aufgabe. Ich werde einen Link zu Kubernetes The Hard Way hinterlassen, einem bekannten praktischen Leitfaden, und wenn Sie interessiert sind, können Sie üben. Glücklicherweise gibt es jedoch alternative Wege und Werkzeuge. Am einfachsten ist es, die Google Kubernetes Engine (GKE) in GCP zu verwenden, mit der Sie nach wenigen Klicks einen vorgefertigten Cluster erhalten. Zu Beginn der Studie empfehle ich die Verwendung dieses Ansatzes, da Sie sich darauf konzentrieren können, die Verwendung von K8 für Ihre Aufgaben zu lernen, anstatt zu untersuchen, wie die internen Komponenten integriert werden sollten. 

Wert für die Automatisierungsinfrastruktur


Betrachten Sie einige der wichtigsten Funktionen, die K8s bietet:

  • : multi-nodes , VMs;
  • : , ;
  • (Self-healing): pods ( );
  • : ,

Aber die K8 sind immer noch keine Silberkugel. Um alle Vor- und Nachteile im Zusammenhang mit den von uns in Betracht gezogenen Werkzeugen (Selen-Gitter, Selenoid) zu verstehen, diskutieren wir kurz die Struktur von K8s. Der Cluster enthält zwei Arten von Knoten: Masterknoten und Arbeiterknoten. Hauptknoten sind für die Verwaltung, Bereitstellung und Planung von Entscheidungen verantwortlich. Auf den Arbeiterknoten werden die Anwendungen ausgeführt. Knoten enthält auch eine Container-Startumgebung. In unserem Fall ist dies Docker, das für Vorgänge im Zusammenhang mit Containern verantwortlich ist. Es gibt aber alternative Lösungen wie Containerd. Es ist wichtig zu verstehen, dass Skalierung oder Selbstheilung nicht direkt auf Behälter angewendet werden. Dies erfolgt durch Hinzufügen / Verringern der Anzahl der Pods, die wiederum Container enthalten (normalerweise ein Container pro Pod, aber je nach Aufgabe kann es mehr geben). Die übergeordnete Hierarchie besteht aus Arbeiterknoten, in denen sich Pods befinden und in denen Container angehoben werden.

Die Skalierungsfunktion ist der Schlüssel und kann sowohl auf Knoten innerhalb eines Cluster-Knotenpools als auch auf Pods innerhalb eines Knotens angewendet werden. Es gibt zwei Arten der Skalierung, die sowohl für Knoten als auch für Pods gelten. Die erste Art - horizontale - Skalierung erfolgt aufgrund einer Zunahme der Anzahl von Knoten / Pods. Dieser Typ ist bevorzugter. Der zweite Typ ist jeweils vertikal. Die Skalierung erfolgt durch Erhöhen der Größe der Knoten / Pods, nicht ihrer Anzahl.

Betrachten Sie unsere Tools nun im Kontext der oben genannten Begriffe.

Selengitter

Wie bereits erwähnt, ist das Selen-Gitter ein sehr beliebtes Werkzeug, und es ist keine Überraschung, dass es containerisiert wurde. Daher ist es nicht überraschend, dass das Selen-Gitter in K8 eingesetzt werden kann. Ein Beispiel dafür finden Sie im offiziellen K8s-Repository. Wie üblich füge ich Links am Ende des Abschnitts hinzu. Darüber hinaus zeigt der praktische Leitfaden in der Terraform-Serie, wie dies funktioniert. Es gibt auch eine Anleitung zum Skalieren der Anzahl der Pods, die Container mit Browsern enthalten. Die automatische Skalierung im Kontext von K8s ist jedoch immer noch keine offensichtliche Aufgabe. Als ich mit dem Studium anfing, fand ich keine praktischen Anleitungen oder Empfehlungen.Nach mehreren Studien und Experimenten mit Unterstützung des DevOps-Teams haben wir uns für den Ansatz entschieden, Container mit den gewünschten Browsern in einem Pod zu heben, der sich in einem Worker-Knoten befindet. Diese Methode ermöglicht es uns, die Strategie der horizontalen Skalierung von Knoten durch Erhöhen ihrer Anzahl anzuwenden. Ich hoffe, dass sich die Situation in Zukunft ändern wird und wir immer mehr Beschreibungen der besten Ansätze und schlüsselfertigen Lösungen sehen werden, insbesondere nach der Veröffentlichung von Selenium Grid 4 mit einer modifizierten internen Architektur.insbesondere nach der Veröffentlichung von Selenium Grid 4 mit einer neu gestalteten internen Architektur.insbesondere nach der Veröffentlichung von Selenium Grid 4 mit einer neu gestalteten internen Architektur.

Selenoid :

Derzeit ist der Einsatz von Selenoid in K8 die größte Enttäuschung. Sie sind nicht kompatibel. Theoretisch können wir einen Selenoid-Container in einem Pod anheben, aber wenn Selenoid Container mit Browsern startet, befinden sie sich immer noch im selben Pod. Dies macht eine Skalierung unmöglich und daher unterscheidet sich die Arbeit von Selenoid innerhalb des Clusters nicht von der Arbeit innerhalb der virtuellen Maschine. Das Ende der Geschichte.

Moon :

Da die Entwickler diesen Engpass bei der Arbeit mit Selenoid kannten, veröffentlichten sie ein leistungsfähigeres Tool namens Moon. Dieses Tool wurde ursprünglich für die Arbeit mit Kubernetes entwickelt. Daher können und sollten Sie die Autoscale-Funktion verwenden. Außerdem würde ich sagen, dass es im Moment das einzige istEin Tool in der Selenium-Welt, das standardmäßig native K8-Cluster-Unterstützung bietet ( nicht mehr verfügbar, siehe nächstes Tool ). Ein wichtiges Merkmal von Moon, das diese Unterstützung bietet, ist: 
Völlig staatenlos. Selenoid speichert im Speicher Informationen zu aktuell ausgeführten Browsersitzungen. Wenn der Prozess aus irgendeinem Grund abstürzt, gehen alle laufenden Sitzungen verloren. Moon hat im Gegensatz dazu keinen internen Status und kann über Rechenzentren hinweg repliziert werden. Browsersitzungen bleiben auch dann am Leben, wenn eine oder mehrere Replikate ausfallen.
Moon ist also eine großartige Lösung, aber mit einem Problem ist es nicht kostenlos. Der Preis hängt von der Anzahl der Sitzungen ab. Es können nur 0-4 Sitzungen kostenlos gestartet werden, was nicht besonders nützlich ist. Ab der fünften Sitzung müssen Sie jedoch jeweils 5 US-Dollar bezahlen. Die Situation kann von Unternehmen zu Unternehmen unterschiedlich sein, aber in unserem Fall ist die Verwendung von Moon sinnlos. Wie oben beschrieben, können wir VMs bei Bedarf mit Selenium Grid starten oder die Anzahl der Knoten im Cluster erhöhen. Für ungefähr eine Pipeline starten wir 500 Browser und stoppen alle Ressourcen, nachdem die Tests abgeschlossen sind. Wenn wir Moon verwenden würden, müssten wir zusätzlich 500 x 5 = 2500 USD pro Monat zahlen, und es spielt keine Rolle, wie oft wir die Tests durchführen. Und wieder sage ich nicht "benutze keinen Mond". Für Ihre Aufgaben kann dies beispielsweise eine unverzichtbare Lösung sein, z.Wenn Sie viele Projekte / Teams in Ihrer Organisation haben und einen großen gemeinsamen Cluster für alle benötigen. Wie immer hinterlasse ich am Ende einen Link und empfehle, alle notwendigen Berechnungen im Rahmen Ihrer Aufgabe durchzuführen.

Callisto : ( Achtung! Dies ist nicht im Originalartikel enthalten und nur in der russischen Übersetzung enthalten. )

Wie gesagt, Selen ist ein sehr beliebtes Werkzeug, und die IT-Branche entwickelt sich sehr schnell. Während ich an der Übersetzung arbeitete, erschien ein neues vielversprechendes Callisto-Tool im Netzwerk (Hallo Cypress und andere Selenium-Killer). Es funktioniert nativ mit K8s und ermöglicht es Ihnen, Selenoid-Container in Pods auszuführen, die von Nodes verteilt werden. Alles funktioniert sofort, einschließlich der automatischen Skalierung. Fiktion, aber es ist notwendig zu testen. Ich habe es bereits geschafft, dieses Tool bereitzustellen und einige Experimente durchzuführen. Aber es ist noch zu früh, um Schlussfolgerungen zu ziehen, nachdem ich die Ergebnisse aus großer Entfernung erhalten habe. Vielleicht werde ich sie in den folgenden Artikeln überprüfen. Bisher lasse ich nur Links für unabhängige Forschung.  







7. (IaC)



Und so kamen wir zum letzten Abschnitt. In der Regel fallen diese Technologie und damit verbundene Aufgaben nicht in den Verantwortungsbereich der Automatisierungsingenieure. Und dafür gibt es Gründe. Erstens werden in vielen Organisationen Infrastrukturprobleme von der DevOps-Abteilung kontrolliert, und die Entwicklungsteams kümmern sich nicht wirklich darum, mit was die Pipeline funktioniert und wie alles, was damit zusammenhängt, unterstützt werden muss. Zweitens, seien wir ehrlich, die Praxis von "Infrastruktur als Code (IaC)" wird in vielen Unternehmen immer noch nicht angewendet. Aber es ist definitiv ein beliebter Trend geworden und es ist wichtig zu versuchen, in verwandte Prozesse, Ansätze und Werkzeuge involviert zu sein. Oder zumindest über die Entwicklungen auf dem Laufenden bleiben.

Beginnen wir mit der Motivation, diesen Ansatz zu verwenden. Wir haben bereits besprochen, dass wir zum Ausführen der Tests in GitlabCI mindestens die Ressourcen benötigen, um den Gitlab Runner auszuführen. Um Container mit Browsern / Emulatoren auszuführen, müssen wir eine VM oder einen Cluster reservieren. Zusätzlich zum Testen von Ressourcen benötigen wir eine erhebliche Anzahl von Kapazitäten zur Unterstützung von Entwicklungsumgebungen, Staging und Produktion, einschließlich Datenbanken, automatischen Zeitplänen, Netzwerkkonfigurationen, Load Balancern, Benutzerrechten usw. Ein zentrales Thema ist der Aufwand, der erforderlich ist, um dies alles zu unterstützen. Es gibt verschiedene Möglichkeiten, wie wir Änderungen vornehmen und Aktualisierungen einführen können. Im Kontext von GCP können wir beispielsweise die UI-Konsole im Browser verwenden und alle Aktionen ausführen, indem wir auf Schaltflächen klicken.Eine alternative Möglichkeit könnte darin bestehen, API-Aufrufe für die Interaktion mit Cloud-Entitäten zu verwenden oder das Befehlszeilenprogramm gcloud zu verwenden, um die erforderlichen Manipulationen durchzuführen. Bei einer wirklich großen Anzahl unterschiedlicher Entitäten und Infrastrukturelemente wird es jedoch schwierig oder sogar unmöglich, alle Vorgänge manuell auszuführen. Darüber hinaus sind alle diese manuellen Aktionen nicht steuerbar. Wir können sie nicht vor der Ausführung zur Überprüfung senden, das Versionskontrollsystem verwenden und die Änderungen, die zu dem Vorfall geführt haben, schnell zurücksetzen. Um solche Probleme zu lösen, haben Ingenieure automatische Bash / Shell-Skripte erstellt und erstellen diese, was nicht viel besser ist als die vorherigen Methoden, da sie nicht so einfach zu lesen, zu verstehen, zu warten und in einem prozeduralen Stil zu ändern sind.

In diesem Artikel und in der Anleitung verwende ich zwei Tools, die sich auf die IaC-Praxis beziehen. Dies sind Terraform und Ansible. Einige glauben, dass es keinen Sinn macht, sie gleichzeitig zu verwenden, da ihre Funktionalität ähnlich und austauschbar ist. Fakt ist aber, dass sie zunächst vor ganz anderen Aufgaben stehen. Und die Tatsache, dass sich diese Tools ergänzen sollten, wurde bei einer gemeinsamen Präsentation von Entwicklern bestätigt, die HashiCorp und RedHat vertreten. Der konzeptionelle Unterschied besteht darin, dass Terraform ein Bereitstellungstool für die Verwaltung der Server selbst ist. Ansible ist ein Konfigurationsverwaltungstool, dessen Aufgabe es ist, Software auf diesen Servern zu installieren, zu konfigurieren und zu verwalten.

Ein weiteres wichtiges Unterscheidungsmerkmal dieser Tools ist die Art des Codeschreibens. Im Gegensatz zu Bash und Ansible verwendet Terraform einen deklarativen Stil, der auf der Beschreibung des gewünschten Endzustands basiert und als Ergebnis der Ausführung erreicht werden muss. Wenn wir beispielsweise 10 VMs erstellen und die Änderungen über Terraform anwenden möchten, erhalten wir 10 VMs. Wenn Sie das Skript erneut anwenden, geschieht nichts, da wir bereits 10 VMs haben und Terraform davon weiß, da es den aktuellen Status der Infrastruktur in einer Statusdatei speichert. Ansible verwendet jedoch einen prozeduralen Ansatz. Wenn Sie ihn bitten, 10 VMs zu erstellen, erhalten wir beim ersten Durchlauf 10 VMs, ähnlich wie bei Terraform. Nach dem Neustart haben wir jedoch bereits 20 VMs. Dies ist ein wichtiger Unterschied.Im prozeduralen Stil speichern wir nicht den aktuellen Status und beschreiben einfach die Abfolge der Schritte, die ausgeführt werden müssen. Natürlich können wir mit verschiedenen Situationen umgehen, mehrere Überprüfungen auf das Vorhandensein von Ressourcen und den aktuellen Status hinzufügen, aber es macht keinen Sinn, unsere Zeit zu verschwenden und Anstrengungen zu unternehmen, um diese Logik zu kontrollieren. Dies erhöht zudem das Fehlerrisiko. 

Zusammenfassend können wir daraus schließen, dass Terraform und deklarative Notation für die Bereitstellung von Servern ein geeigneteres Werkzeug sind. Die Arbeit des Konfigurationsmanagements wird jedoch besser an Ansible delegiert. Nachdem wir uns damit befasst haben, schauen wir uns Beispiele für die Verwendung im Kontext der Automatisierung an.

Wert für die Automatisierungsinfrastruktur


Es ist nur wichtig zu verstehen, dass die Testautomatisierungsinfrastruktur als Teil der gesamten Infrastruktur des Unternehmens betrachtet werden sollte. Dies bedeutet, dass alle IaC-Praktiken global auf die Ressourcen der gesamten Organisation angewendet werden müssen. Wer dafür verantwortlich ist, hängt von Ihren Prozessen ab. Das DevOps-Team ist in diesen Angelegenheiten erfahrener und sieht das ganze Bild von dem, was passiert. QS-Ingenieure sind jedoch stärker in den Prozess der Gebäudeautomation und die Struktur der Pipeline involviert, sodass sie alle erforderlichen Änderungen und Verbesserungsmöglichkeiten besser erkennen können. Die beste Option ist, zusammenzuarbeiten, Wissen und Ideen auszutauschen, um das erwartete Ergebnis zu erzielen. 

Hier einige Beispiele für die Verwendung von Terraform und Ansible im Zusammenhang mit der Testautomatisierung und den zuvor beschriebenen Tools:

1. Beschreiben Sie über Terraform die erforderlichen Eigenschaften und Parameter von VMs und Clustern.

2. Installieren Sie mit Ansible die zum Testen erforderlichen Tools: Docker, Selenoid, Selenium Grid und laden Sie die erforderlichen Versionen der Browser / Emulatoren herunter.

3. Beschreiben Sie über Terraform die Eigenschaften der VM, in der der GitLab Runner gestartet wird.

4. Installieren Sie mit Ansible GitLab Runner und den erforderlichen zugehörigen Tools die Einstellungen und Konfigurationen.

Darstellung des aktuellen Standes der Infrastruktur



Studienlinks:



Ähnliche Werkzeuge




Zusammenfassen!


SchrittTechnologieWerkzeugeWert für die Automatisierungsinfrastruktur
1Local runningNode.js, Selenium, Appium
  • web mobile
  • ( Node.js)

2Version control systems Git

3ContainerisationDocker, Selenium grid, Selenoid (Web, Android)
  • ,

4CI / CDGitlab CI
  • /

5Cloud platformsGoogle Cloud Platform
  • ( )

6OrchestrationKubernetes/ pods:
  • /

7Infrastruktur als Code (IaC)Terraform, ansible
  • Ähnliche Vorteile mit der Entwicklungsinfrastruktur
  • Alle Vorteile der Codeversionierung
  • Einfache Änderungen und Wartung
  • Vollautomatisch



Mind-Map-Diagramme: Entwicklung der Infrastruktur


Schritt 1: Lokal


Schritt 2: vcs


Schritt 3: Containerisierung 


Schritt 4: CI / CD 


Schritt 5: Cloud-Plattformen


Schritt 6: Orchestrierung


Schritt 7: IaC


Was weiter?


Das ist also das Ende des Artikels. Abschließend möchte ich jedoch einige Vereinbarungen mit Ihnen treffen.

Ihrerseits
Wie eingangs gesagt, möchte ich, dass der Artikel von praktischem Nutzen ist und Ihnen hilft, das erworbene Wissen in der Praxis anzuwenden. Ich füge noch einmal einen Link zu einem praktischen Leitfaden hinzu .

Aber auch danach sollten Sie nicht aufhören, üben, die relevanten Links und Bücher studieren, herausfinden, wie es in Ihrem Unternehmen funktioniert, Orte finden, die verbessert werden können, und daran teilnehmen. Viel Glück

Von meiner Seite aus

Aus der Überschrift geht hervor, dass dies nur der erste Teil war. Trotz der Tatsache, dass es sich als ziemlich groß herausstellte, werden wichtige Themen hier immer noch nicht offengelegt. Im zweiten Teil möchte ich die Automatisierungsinfrastruktur im Kontext von IOS betrachten. Aufgrund der Einschränkungen von Apple hinsichtlich der Ausführung von iOS-Simulationen nur auf MacOS-Systemen wurde unser Lösungspaket eingegrenzt. Beispielsweise können wir Docker nicht zum Ausführen eines Simulators oder von öffentlichen Clouds zum Ausführen virtueller Maschinen verwenden. Dies bedeutet jedoch nicht, dass es keine anderen Alternativen gibt. Ich werde versuchen, Sie mit fortschrittlichen Lösungen und modernen Tools auf dem Laufenden zu halten!

Außerdem habe ich keine großen Themen im Zusammenhang mit der Überwachung erwähnt. In Teil 3 werde ich die beliebtesten Tools zur Überwachung der Infrastruktur sowie die zu berücksichtigenden Daten und Metriken betrachten.

Und schlussendlich. In Zukunft plane ich, einen Videokurs zum Aufbau einer Testinfrastruktur und beliebter Tools zu veröffentlichen. Derzeit gibt es im Internet eine ganze Reihe von Kursen und Vorträgen zu DevOps, aber alle Materialien werden im Kontext der Entwicklung präsentiert, jedoch nicht zum Testen der Automatisierung. In dieser Angelegenheit brauche ich wirklich Feedback, wenn dieser Kurs für die Community der Tester und Automatisierungsingenieure interessant und wertvoll sein wird. Vielen Dank im Voraus!

All Articles