{"id":78676,"date":"2020-04-21T07:42:22","date_gmt":"2020-04-21T05:42:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya"},"modified":"2020-04-21T07:42:22","modified_gmt":"2020-04-21T05:42:22","slug":"devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","title":{"rendered":"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Teil 1: Web \/ Android<\/h1>\n<p>\n <u>Hinweis<\/u>: <i>Dieser Artikel ist eine \u00dcbersetzung des originalen Artikels ins Deutsche.\u00a0<\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@altunin.alexey.a\/devops-tools-are-not-only-for-devops-building-test-automation-infrastructure-from-scratch-18e351dde938?source=friends_link&amp;sk=54dcbf6ab96c5592d093b50e441f942e\"><i>\u201eDevOps-Tools sind nicht nur f\u00fcr DevOps. Aufbau einer Testautomatisierungsinfrastruktur von Grund auf.\u201c<\/i><\/a><\/noindex><i> Alle Illustrationen, Links, Zitate und Begriffe bleiben jedoch in der Originalsprache, um Verzerrungen des Sinns bei der \u00dcbersetzung ins Deutsche zu vermeiden. Ich w\u00fcnsche Ihnen viel Freude beim Lernen!<\/i><\/p>\n<p><img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/3d2ffb8331713a18755213cafac02144.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n Derzeit ist die Spezialisierung DevOps eine der gefragtesten in der IT-Branche. Wenn Sie beliebte Jobportale besuchen und nach Geh\u00e4ltern filtern, werden Sie feststellen, dass die Stellenanzeigen im Zusammenhang mit DevOps ganz oben auf der Liste stehen. Allerdings ist es wichtig zu verstehen, dass dies haupts\u00e4chlich f\u00fcr die Position des \u201aSenior\u2018 gilt, was bedeutet, dass der Kandidat \u00fcber ein hohes Ma\u00df an F\u00e4higkeiten und Kenntnisse in Technologien und Werkzeugen verf\u00fcgt. Dies bringt auch eine hohe Verantwortung f\u00fcr den reibungslosen Betrieb der Produktion mit sich. Doch wir scheinen zu vergessen, was DevOps eigentlich ist. Urspr\u00fcnglich war es keine spezifische Person oder Abteilung. Wenn wir nach Definitionen dieses Begriffs suchen, finden wir viele sch\u00f6ne und korrekte Substantive wie Methodologie, Praktiken, kulturelle Philosophie, eine Gruppe von Konzepten und so weiter.<\/p>\n<p>Meine Spezialisierung ist Ingenieur f\u00fcr Testautomatisierung (QA Automation Engineer), doch ich bin der Meinung, dass diese nicht nur mit dem Schreiben von automatisierten Tests oder der Entwicklung der Architektur von Testframeworks verbunden sein sollte. Im Jahr 2020 sind auch Kenntnisse in der Infrastrukturautomatisierung notwendig. Dies erm\u00f6glicht es, den Automatisierungsprozess selbst\u00e4ndig zu organisieren, von der Durchf\u00fchrung von Tests bis hin zur Bereitstellung der Ergebnisse f\u00fcr alle Beteiligten gem\u00e4\u00df den festgelegten Zielen. Daher sind DevOps-F\u00e4higkeiten ein notwendiger Faktor f\u00fcr diese Arbeit. Und das ist alles gut, aber leider gibt es ein Problem (<i>Spoiler: Dieser Artikel versucht, dieses Problem zu vereinfachen<\/i>). Es besteht darin, dass DevOps kompliziert ist. Und das ist offensichtlich, denn Unternehmen werden nicht viel f\u00fcr das bezahlen, was leicht zu machen ist... In der Welt von DevOps gibt es eine Vielzahl von Tools, Begriffen und Praktiken, die gemeistert werden m\u00fcssen. Besonders am Anfang der Karriere kann das eine Herausforderung sein und h\u00e4ngt vom angesammelten technischen Wissen ab.<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/20712bd4acf881d5346b87f5a2b359d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nQuelle: <noindex><a rel=\"nofollow\" href=\"http:\/\/maximelanciauxbi.blogspot.com\/2017\/04\/devops-tools.html\"> http:\/\/maximelanciauxbi.blogspot.com\/2017\/04\/devops-tools.html<\/a><\/noindex><\/p>\n<p>Hier beenden wir m\u00f6glicherweise den einleitenden Teil und konzentrieren uns auf das Ziel dieses Artikels.\u00a0<\/p>\n<h3>Wor\u00fcber handelt dieser Artikel<\/h3>\n<p>\nIn diesem Artikel m\u00f6chte ich meine Erfahrungen im Aufbau einer Testautomatisierungsinfrastruktur teilen. Im Internet gibt es viele Informationsquellen \u00fcber verschiedene Werkzeuge und deren Nutzung, aber ich m\u00f6chte sie ausschlie\u00dflich im Kontext der Automatisierung betrachten. Ich glaube, vielen Automatisierungsingenieuren ist die Situation bekannt, in der die entwickelten Tests au\u00dfer Ihnen niemand ausf\u00fchrt oder sich um deren Wartung k\u00fcmmert. Dies f\u00fchrt dazu, dass die Tests veraltet sind und Zeit f\u00fcr deren Aktualisierung aufgewendet werden muss. Gerade zu Beginn der Karriere kann dies eine ziemlich herausfordernde Aufgabe sein: die richtigen Werkzeuge auszuw\u00e4hlen, die dabei helfen k\u00f6nnen, dieses Problem zu l\u00f6sen, sowie sie zu w\u00e4hlen, einzurichten und zu warten. Einige Tester wenden sich an DevOps (die Leute), und seien wir ehrlich, dieser Ansatz funktioniert. In vielen F\u00e4llen kann dies die einzige Option sein, da wir keine Sicht auf alle Abh\u00e4ngigkeiten haben. Doch, wie wir wissen, sind DevOps sehr besch\u00e4ftigte Leute, da sie \u00fcber die Infrastruktur des gesamten Unternehmens, Deployment, Monitoring, Mikrodienste und andere \u00e4hnliche Aufgaben nachdenken m\u00fcssen, abh\u00e4ngig von der Organisation\/dem Team. Wie so oft hat die Automatisierung dabei keine Priorit\u00e4t. In einem solchen Fall m\u00fcssen wir versuchen, alles in unserer Macht Stehende von Anfang bis Ende zu tun. Dies wird die Abh\u00e4ngigkeiten reduzieren, den Arbeitsablauf beschleunigen, unsere F\u00e4higkeiten verbessern und uns erm\u00f6glichen, einen umfassenderen \u00dcberblick \u00fcber das Geschehen zu bekommen.<\/p>\n<p>In diesem Artikel werden die gefragtesten und beliebtesten Tools vorgestellt und erl\u00e4utert, wie man sie f\u00fcr den schrittweisen Aufbau einer Automatisierungsinfrastruktur nutzen kann. Jede Gruppe wird durch Werkzeuge repr\u00e4sentiert, die aus pers\u00f6nlicher Erfahrung getestet wurden. Das bedeutet jedoch nicht, dass Sie dieselben verwenden m\u00fcssen. Die Tools selbst sind nicht entscheidend; sie kommen und gehen. Unsere ingenieurtechnische Aufgabe besteht darin, die grundlegenden Prinzipien zu verstehen: Warum brauchen wir diese Gruppe von Tools und welche Arbeitsaufgaben k\u00f6nnen wir damit l\u00f6sen? Daher lasse ich am Ende jeder Sektion Links zu \u00e4hnlichen Tools, die m\u00f6glicherweise in Ihrer Organisation verwendet werden.<\/p>\n<h3>Was in diesem Artikel nicht enthalten ist<\/h3>\n<p>\nIch wiederhole, dass es in diesem Artikel nicht um spezifische Tools geht, weshalb es hier keine Code-Snippets aus der Dokumentation und keine Beschreibungen spezifischer Befehle geben wird. Aber am Ende jeder Sektion lasse ich Links f\u00fcr eine detaillierte Betrachtung.<\/p>\n<p>Dies geschieht aus folgendem Grund:\u00a0<\/p>\n<ul>\n<li>Dieses Material ist in verschiedenen Quellen (Dokumentationen, B\u00fccher, Videokurse) sehr leicht zu finden;<\/li>\n<li>Wenn wir tiefer eintauchen, m\u00fcssten wir 10, 20 oder 30 Teile dieses Artikels schreiben (w\u00e4hrend nur 2-3 geplant sind);<\/li>\n<li>Ich m\u00f6chte einfach nicht Ihre Zeit verschwenden, da Sie m\u00f6glicherweise andere Werkzeuge zur Erreichung derselben Ziele nutzen m\u00f6chten.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Praxis<\/h3>\n<p>\nIch w\u00fcnsche mir sehr, dass dieses Material f\u00fcr jeden Leser n\u00fctzlich ist und nicht einfach gelesen und vergessen wird. Praxis ist ein sehr wichtiger Bestandteil jedes Lernprozesses. Deshalb habe ich<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> ein GitHub-Repository mit einer schrittweisen Anleitung erstellt, wie man alles von Grund auf macht.<\/a><\/noindex>Sie erwartet auch Hausaufgaben, um sicherzustellen, dass Sie die ausgef\u00fchrten Befehle nicht gedankenlos kopiert haben. <\/p>\n<h3>Gliederung<\/h3>\n<p><\/p>\n<p><strong>Schritt<\/strong><br \/>\n<strong>Technologie<\/strong><br \/>\n<strong>Tools<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nLokaler Betrieb (Vorbereitung von Web-\/Android-Demo-Tests und lokalem Betrieb)\u00a0<br \/>\nNode.js, Selenium, Appium<\/p>\n<p><strong>2<\/strong><br \/>\nVersionskontrollsysteme\u00a0<br \/>\nGit<\/p>\n<p><strong>3<\/strong><br \/>\nContainerisierung<br \/>\nDocker, Selenium Grid, Selenoid (Web, Android)<\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\n(geschrieben in<\/p>\n<p><strong>5<\/strong><br \/>\nCloud-Plattformen<br \/>\nGoogle Cloud Platform<\/p>\n<p><strong>6<\/strong><br \/>\nOrchestrierung<br \/>\nKubernetes<\/p>\n<p><strong>7<\/strong><br \/>\nInfrastructure as Code (IaC)<br \/>\nTerraform, Ansible<\/p>\n<p><\/p>\n<h3>Struktur jeder Sektion<\/h3>\n<p>\nUm die Erz\u00e4hlung \u00fcbersichtlich zu gestalten, wird jede Sektion nach folgendem Plan beschrieben:<\/p>\n<ul>\n<li>kurze Beschreibung der Technologie,<\/li>\n<li>Wert f\u00fcr die Infrastrukturautomatisierung,<\/li>\n<li>Illustration des aktuellen Stands der Infrastruktur,<\/li>\n<li>Links zum Studieren,<\/li>\n<li>\u00e4hnliche Werkzeuge.<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. Lokaler Testlauf<\/h2>\n<p><\/p>\n<h3>Kurze Beschreibung der Technologie<\/h3>\n<p>\nDies ist nur ein vorbereitender Schritt, um lokale Demotests zu starten und zu \u00fcberpr\u00fcfen, ob sie erfolgreich durchgef\u00fchrt werden. In der praktischen Anwendung wird Node.js verwendet, aber die Programmiersprache und Plattform sind ebenfalls nicht wichtig; Sie k\u00f6nnen die verwenden, die in Ihrem Unternehmen genutzt werden.\u00a0<\/p>\n<p>Als Automatisierungswerkzeuge empfehle ich jedoch, Selenium WebDriver f\u00fcr Webplattformen und Appium f\u00fcr Android-Plattformen zu verwenden. In den n\u00e4chsten Schritten werden wir Docker-Images nutzen, die speziell f\u00fcr die Arbeit mit diesen Werkzeugen optimiert sind. Dar\u00fcber hinaus sind diese Werkzeuge laut den Anforderungen in den Stellenanzeigen auf dem Markt am gefragtesten.<\/p>\n<p>Wie Sie m\u00f6glicherweise bemerkt haben, betrachten wir nur Web- und Android-Tests. Leider ist iOS eine ganz andere Geschichte (danke Apple). Ich plane, L\u00f6sungen und Praktiken im Zusammenhang mit iOS in den n\u00e4chsten Teilen zu demonstrieren.<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\nAus infrastruktureller Sicht bietet ein lokaler Launch keinen Mehrwert. Sie \u00fcberpr\u00fcfen lediglich, ob die Tests auf der lokalen Maschine in lokalen Browsern und Emulatoren funktionieren. Trotzdem ist dies ein notwendiger Ausgangspunkt.<\/p>\n<h3>Illustration des aktuellen Infrastrukturstatus<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/504f28744e29938f66be41c32d9a7dc6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Ressourcen zum Lernen<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/selenium.dev\/\">Selenium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/appium.io\/docs\/en\/about-appium\/getting-started\/\">Appium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developer.android.com\/studio\/run\/emulator\">Android Emulator<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/tree\/master\/javascript\/node\/selenium-webdriver\/example\">Selenium JS GitHub-Beispiele<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appium\/appium\/tree\/master\/sample-code\/javascript-wd\">Appium JS GitHub-Beispiele<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c4hnliche Werkzeuge<\/h3>\n<p><\/p>\n<ul>\n<li>jede Programmiersprache, die Ihnen gef\u00e4llt, in Verbindung mit Selenium\/Appium - Tests;<\/li>\n<li>beliebige Tests;<\/li>\n<li>irgendein Test-Runner.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Versionskontrollsysteme (Git)<\/h2>\n<p><\/p>\n<h3>Kurze Beschreibung der Technologie<\/h3>\n<p>\n Es wird niemanden \u00fcberraschen, wenn ich sage, dass ein Versionskontrollsystem ein \u00e4u\u00dferst wichtiger Bestandteil der Entwicklung ist, sowohl im Team als auch individuell. Verschiedene Quellen best\u00e4tigen, dass Git der verbreitetste Vertreter ist. Ein Versionskontrollsystem bietet zahlreiche Vorteile, darunter den Austausch von Code, die Speicherung von Versionen, die Wiederherstellung fr\u00fcherer Branches, die \u00dcberwachung der Projektgeschichte und Backups. Wir werden nicht auf jeden einzelnen Punkt im Detail eingehen, da ich sicher bin, dass Sie damit bereits gut vertraut sind und es in Ihrer t\u00e4glichen Arbeit nutzen. Sollte das jedoch nicht der Fall sein, empfehle ich Ihnen, das Lesen dieses Artikels zu unterbrechen und dieses Wissen so schnell wie m\u00f6glich nachzuholen.<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\n Hier k\u00f6nnen Sie sich berechtigterweise fragen: \u201eWarum erz\u00e4hlt er uns von Git? Das wissen doch alle und nutzen es sowohl f\u00fcr die Entwicklungscode als auch f\u00fcr den automatischen Testcode.\u201c Sie haben vollkommen recht, aber in diesem Artikel sprechen wir \u00fcber Infrastruktur, und dieser Abschnitt dient als Vorschau f\u00fcr Abschnitt 7: \u201eInfrastructure as Code (IaC)\u201c. F\u00fcr uns bedeutet das, dass die gesamte Infrastruktur, einschlie\u00dflich der Testinfrastruktur, in Form von Code beschrieben wird. Daher k\u00f6nnen wir auch Versionsverwaltungssysteme darauf anwenden und \u00e4hnliche Vorteile erzielen, wie sie f\u00fcr Entwicklungs- und Automatisierungscode gelten.<\/p>\n<p>Wir werden IaC detaillierter in Schritt 7 betrachten, aber selbst jetzt k\u00f6nnen Sie lokal mit Git beginnen, indem Sie ein lokales Repository erstellen. Das Gesamtbild wird erweitert, wenn wir ein Remote-Repository zur Infrastruktur hinzuf\u00fcgen.<\/p>\n<h3>Illustration des aktuellen Infrastrukturstatus<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/f17c1d2b2f18aa814c44f7c443e49416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Ressourcen zum Lernen<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/what-is-version-control\">Was ist Versionskontrolle<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/\">Git<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/book\/en\/v2\/Getting-Started-About-Version-Control\">Erste Schritte \u2014 \u00dcber Versionskontrolle<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c4hnliche Werkzeuge<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/subversion.apache.org\/\">SVN<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.mercurial-scm.org\/guide\">Mercurial<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/azure.microsoft.com\/en-us\/services\/devops\/server\/\">Microsoft TFS (jetzt Teil von Azure DevOps Services)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>3. Containerisierung (Docker)<\/h2>\n<p><\/p>\n<h3>Kurze Beschreibung der Technologie<\/h3>\n<p>\n Um zu demonstrieren, wie die Containerisierung die Spielregeln ver\u00e4ndert hat, begeben wir uns einige Jahrzehnte zur\u00fcck in die Vergangenheit. Damals kauften und verwendeten die Menschen Servermaschinen, um Anwendungen auszuf\u00fchren. In den meisten F\u00e4llen waren jedoch die ben\u00f6tigten Ressourcen f\u00fcr den Betrieb im Voraus nicht bekannt. Dies f\u00fchrte dazu, dass Unternehmen Geld f\u00fcr den Kauf teurer, leistungsstarker Server ausgaben, von denen ein Teil nicht vollst\u00e4ndig genutzt wurde.<\/p>\n<p>Der n\u00e4chste Evolutionsschritt waren virtuelle Maschinen (VM), die das Problem der Verschwendung ungenutzter Ressourcen l\u00f6sten. Diese Technologie erm\u00f6glichte es, Anwendungen unabh\u00e4ngig voneinander auf einem Server auszuf\u00fchren und dabei vollst\u00e4ndig isolierte Bereiche bereitzustellen. Leider hat jede Technologie auch ihre Nachteile. Der Betrieb von VMs ben\u00f6tigt ein vollst\u00e4ndiges Betriebssystem, das CPU, RAM und Speicherplatz verbraucht. Abh\u00e4ngig vom OS m\u00fcssen auch Lizenzkosten ber\u00fccksichtigt werden. Diese Faktoren beeinflussen die Ladegeschwindigkeit und erschweren die Portabilit\u00e4t.<\/p>\n<p>Und hier kommen wir zur Containerisierung. Auch diese Technologie hat das vorherige Problem gel\u00f6st, da Container kein vollst\u00e4ndiges Betriebssystem verwenden, was eine gro\u00dfe Menge an Ressourcen freisetzt und eine schnelle und flexible L\u00f6sung f\u00fcr die Portabilit\u00e4t bietet.<\/p>\n<p>Nat\u00fcrlich ist die Containerisierungstechnologie nichts Neues und wurde erstmals Ende der 70er Jahre vorgestellt. In dieser Zeit wurde viel geforscht, entwickelt und ausprobiert. Doch Docker hat diese Technologie angepasst und sie f\u00fcr die Massen leicht zug\u00e4nglich gemacht. Heutzutage, wenn wir von Containern sprechen, meinen wir in den meisten F\u00e4llen Docker. Wenn wir von Docker-Containern sprechen, beziehen wir uns auf Linux-Container. Wir k\u00f6nnen Windows- und macOS-Systeme verwenden, um Container zu betreiben, aber es ist wichtig zu verstehen, dass in diesem Fall eine zus\u00e4tzliche Schicht entsteht. Zum Beispiel startet Docker auf dem Mac Container innerhalb einer leichten Linux-VM. Wir werden dieses Thema noch einmal aufgreifen, wenn wir \u00fcber das Ausf\u00fchren von Android-Emulatoren innerhalb von Containern sprechen, da hierbei ein sehr wichtiger Aspekt auftritt, der genauer betrachtet werden muss.<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\n Wir haben herausgefunden, dass Containerisierung und Docker gro\u00dfartig sind. Lassen Sie uns das im Kontext der Automatisierung betrachten, denn jedes Tool oder jede Technologie sollte ein bestimmtes Problem l\u00f6sen. Lassen Sie uns die offensichtlichen Automatisierungsprobleme im Kontext der UI-Tests betrachten:<\/p>\n<ul>\n<li>eine Vielzahl von Abh\u00e4ngigkeiten beim Installieren von Selenium und insbesondere Appium;<\/li>\n<li>Kompatibilit\u00e4tsprobleme zwischen Versionen von Browsern, Simulatoren und Treibern;<\/li>\n<li>fehlender isolierter Raum f\u00fcr Browser\/Simulatoren, was besonders kritisch f\u00fcr den parallelen Betrieb ist;<\/li>\n<li>schwierig zu verwalten und zu warten, wenn es notwendig ist, 10, 50, 100 oder sogar 1000 Browser gleichzeitig zu starten.<\/li>\n<\/ul>\n<p>\nAber da Selenium das beliebteste Automatisierungstool ist und Docker das beliebteste Containerisierungstool ist, sollte es niemanden \u00fcberraschen, dass jemand versucht hat, sie zu kombinieren, um ein leistungsstarkes Tool zur L\u00f6sung der oben genannten Probleme zu schaffen. Lassen Sie uns solche L\u00f6sungen n\u00e4her betrachten.\u00a0<\/p>\n<p><u>Selenium Grid in Docker<\/u><\/p>\n<p>Dieses Tool gilt als das weltweit beliebteste Selenium-Tool f\u00fcr die Ausf\u00fchrung mehrerer Browser auf verschiedenen Maschinen und deren Verwaltung von einem zentralen Knoten aus. Um es zu starten, m\u00fcssen wir mindestens zwei Teile registrieren: Hub und Node(s). Der Hub ist der zentrale Knoten, der alle Anfragen von den Tests entgegennimmt und an die entsprechenden Nodes verteilt. F\u00fcr jede Node k\u00f6nnen wir eine spezifische Konfiguration festlegen, zum Beispiel den gew\u00fcnschten Browser und dessen Version angeben. Dennoch m\u00fcssen wir f\u00fcr die Browser kompatible Treiber bereitstellen und diese auf den entsprechenden Nodes installieren. Aus diesem Grund wird das Selenium-Grid in seiner reinen Form nur verwendet, wenn wir mit Browsern arbeiten m\u00fcssen, die nicht auf Linux-OS installiert werden k\u00f6nnen. F\u00fcr alle anderen F\u00e4lle ist die Verwendung von Docker-Images f\u00fcr die Ausf\u00fchrung von Selenium-Grid-Hub und Nodes eine deutlich flexiblere und passendere L\u00f6sung. Dieser Ansatz vereinfacht das Management der Knoten erheblich, da wir das gew\u00fcnschte Image mit bereits installierten kompatiblen Versionen von Browsern und Treibern ausw\u00e4hlen k\u00f6nnen.<\/p>\n<p>Trotz negativer Bewertungen zur Stabilit\u00e4t, insbesondere beim gleichzeitigen Start einer gro\u00dfen Anzahl von Nodes, bleibt Selenium Grid dennoch das beliebteste Tool f\u00fcr die parallele Ausf\u00fchrung von Selenium-Tests. Es ist wichtig zu beachten, dass im Open-Source-Bereich st\u00e4ndig verschiedene Erweiterungen und Modifikationen dieses Tools entwickelt werden, die gegen diverse Engp\u00e4sse ank\u00e4mpfen.<\/p>\n<p><u>Selenoid f\u00fcr Web<\/u><\/p>\n<p>Dieses Tool ist eine Revolution in der Welt von Selenium, da es direkt einsatzbereit ist und das Leben vieler Automatisierungsingenieure erheblich erleichtert hat. Vor allem handelt es sich hierbei nicht um eine weitere Modifikation von Selenium Grid. Vielmehr haben die Entwickler eine v\u00f6llig neue Version des Selenium Hub in Golang erstellt, was in Kombination mit leichtgewichtigen Docker-Images f\u00fcr verschiedene Browser den Fortschritt in der Automatisierung von Tests erheblich gef\u00f6rdert hat. Dar\u00fcber hinaus m\u00fcssen wir bei Selenium Grid alle erforderlichen Browser und deren Versionen im Voraus festlegen, was zwar kein Problem darstellt, wenn wir nur mit einem bestimmten Browser arbeiten. Wenn es jedoch um mehrere unterst\u00fctzte Browser geht, ist Selenoid die Nummer eins, dank der Funktion \u201eBrowser on demand\u201c. Alles, was wir tun m\u00fcssen, ist, die ben\u00f6tigten Browser-Images im Voraus herunterzuladen und die Konfigurationsdatei zu aktualisieren, mit der Selenoid interagiert. Sobald Selenoid eine Anfrage von den Tests erh\u00e4lt, startet es automatisch den ben\u00f6tigten Container mit dem passenden Browser. Wenn der Test abgeschlossen ist, entfernt Selenoid den Container und gibt so die Ressourcen f\u00fcr die n\u00e4chsten Anfragen frei. Dieser Ansatz beseitigt vollst\u00e4ndig das bekannte Problem der \u201eKnotenabnahme\u201c, das wir h\u00e4ufig bei Selenium Grid antreffen.<\/p>\n<p>Leider ist Selenoid immer noch keine Allheilmittel. Wir haben die Funktion \u201aBrowser on Demand\u2018 erhalten, aber die Funktion \u201aRessourcen on Demand\u2018 ist weiterhin nicht verf\u00fcgbar. Um Selenoid zu nutzen, m\u00fcssen wir es auf physischer Hardware oder in einer VM bereitstellen, was bedeutet, dass wir im Voraus wissen m\u00fcssen, wie viele Ressourcen ben\u00f6tigt werden. Ich denke, das ist kein Problem f\u00fcr kleine Projekte, die 10, 20 oder sogar 30 Browser parallel ausf\u00fchren. Aber was ist, wenn wir 100, 500, 1000 oder mehr ben\u00f6tigen? Es macht keinen Sinn, so viele Ressourcen dauerhaft zu halten und zu bezahlen. In den Abschnitten 5 und 6 dieses Artikels werden wir L\u00f6sungen diskutieren, die eine Skalierung erm\u00f6glichen und somit die Kosten des Unternehmens erheblich senken.<\/p>\n<p><u>Selenoid f\u00fcr Android<\/u><\/p>\n<p>Nach dem Erfolg von Selenoid als Tool f\u00fcr die Webautomatisierung wollten die Leute etwas \u00c4hnliches f\u00fcr Android. Und das ist geschehen \u2013 Selenoid wurde mit Unterst\u00fctzung f\u00fcr Android ver\u00f6ffentlicht. Aus der Sicht eines hochgradigen Nutzers funktioniert es \u00e4hnlich wie die Webautomatisierung. Der einzige Unterschied besteht darin, dass Selenoid anstelle von Containern mit Browsern Container mit Android-Emulatoren startet. Meiner Meinung nach ist dies derzeit das leistungsst\u00e4rkste kostenlose Tool zum parallelen Ausf\u00fchren von Android-Tests.<\/p>\n<p>Ich m\u00f6chte ungern \u00fcber die negativen Aspekte dieses Tools sprechen, da ich es wirklich sehr mag. Dennoch gibt es auch hier dieselben Nachteile, die mit Web-Automatisierung in Verbindung stehen und zu Skalierungsproblemen f\u00fchren k\u00f6nnen. Au\u00dferdem gibt es eine weitere Einschr\u00e4nkung, die \u00fcberraschend sein k\u00f6nnte, wenn wir das Tool zum ersten Mal einrichten. Um Android-Images zu starten, ben\u00f6tigen wir eine physische Maschine oder eine VM mit unterst\u00fctzter verschachtelter Virtualisierung. In der praktischen Anleitung zeige ich, wie man das auf einer Linux-VM aktiviert. Wenn Sie jedoch macOS-Benutzer sind und Selenoid lokal bereitstellen m\u00f6chten, wird es nicht m\u00f6glich sein, Android-Tests durchzuf\u00fchren. Sie k\u00f6nnen jedoch jederzeit eine Linux-VM lokal mit aktivierter \u201everschachtelter Virtualisierung\u201c starten und Selenoid darin bereitstellen.<\/p>\n<h3>Illustration des aktuellen Infrastrukturstatus<\/h3>\n<p>\n Im Rahmen dieses Artikels f\u00fcgen wir zwei Tools hinzu, um die Infrastruktur zu veranschaulichen. Das sind Selenium Grid f\u00fcr Web-Tests und Selenoid f\u00fcr Android-Tests. Im GitHub-Handbuch werde ich auch zeigen, wie man Selenoid f\u00fcr die Ausf\u00fchrung von Web-Tests verwendet.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/1202ae79eba9cffc965f3a5b2648c755.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Ressourcen zum Lernen<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/resources\/what-container\">Docker: Was ist ein Container?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">Docker: Erste Schritte<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/containerjournal.com\/topics\/container-ecosystems\/5-container-alternatives-to-docker\/\">5 Alternativen zu Docker-Containern<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/Grid2\">Selenium Grid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/docker-selenium\">Selenium Docker<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aerokube.com\/selenoid\/latest\/\">Selenoid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aerokube\/selenoid\">Selenoid GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developer.android.com\/studio\/run\/emulator-acceleration#vm-linux\">KVM-Setup f\u00fcr Android-Emulatoren<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Docker-Deep-Dive-Nigel-Poulton-ebook\/dp\/B01LXWQUFF\/ref=pd_sim_351_1\/147-1129855-1615632?_encoding=UTF8&amp;pd_rd_i=B01LXWQUFF&amp;pd_rd_r=f8dcd666-e707-4f85-99c6-24ecec56ea74&amp;pd_rd_w=rMnHL&amp;pd_rd_wg=u17vC&amp;pf_rd_p=bab57536-7c8f-4781-a8ed-3e270b9cd303&amp;pf_rd_r=KN6EXNGBWJ6B9QNJE4M2&amp;psc=1&amp;refRID=KN6EXNGBWJ6B9QNJE4M2\">Docker Deep Dive Buch<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c4hnliche Werkzeuge<\/h3>\n<p><\/p>\n<ul>\n<li>Es gibt andere Containerisierungstools, aber Docker ist das beliebteste. Wenn Sie etwas anderes ausprobieren m\u00f6chten, beachten Sie bitte, dass die Tools, die wir f\u00fcr die parallele Ausf\u00fchrung von Selenium-Tests besprochen haben, nicht von Haus aus funktionieren.\u00a0\u00a0<\/li>\n<li>Wie bereits erw\u00e4hnt, gibt es viele Modifikationen von Selenium Grid, zum Beispiel<noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.zalando.com\/zalenium\/\"> Zalenium<\/a><\/noindex>. <\/li>\n<\/ul>\n<p><\/p>\n<h2>4. CI \/ CD<\/h2>\n<p><\/p>\n<h3>Kurze Beschreibung der Technologie<\/h3>\n<p>\n Die Praxis der kontinuierlichen Integration ist in der Softwareentwicklung recht popul\u00e4r und steht auf einer Stufe mit Versionskontrollsystemen. Dennoch habe ich das Gef\u00fchl, dass es Verwirrung in der Terminologie gibt. In diesem Absatz m\u00f6chte ich aus meiner Perspektive drei Modifikationen dieser Technologie erl\u00e4utern. Im Internet finden Sie viele Artikel mit unterschiedlichen Interpretationen, und es ist absolut normal, wenn Ihre Meinung davon abweicht. Das Wichtigste ist, dass Sie mit Ihren Kollegen auf einer Wellenl\u00e4nge sind.<\/p>\n<p>Es gibt also drei Begriffe: CI \u2014 Continuous Integration (kontinuierliche Integration), CD \u2014 Continuous Delivery (kontinuierliche Lieferung) und erneut CD \u2014 Continuous Deployment (kontinuierliche Bereitstellung). (<i>In der Folge werde ich diese Begriffe in englischer Sprache verwenden.<\/i>). Jede Modifikation f\u00fcgt mehrere zus\u00e4tzliche Schritte zu Ihrer Entwicklungs-Pipeline hinzu. Aber das Wort <u>kontinuierlich<\/u> (kontinuierlich) ist das Wichtigste. In diesem Kontext beziehen wir uns auf etwas, das von Anfang bis Ende geschieht, ohne Unterbrechungen oder manuelles Eingreifen. Lassen Sie uns CI &amp; CD und CD in diesem Kontext betrachten.<\/p>\n<ul>\n<li><strong>Kontinuierliche Integration \u2013<\/strong> ist der erste Schritt in der Evolution. Nachdem neuer Code auf den Server hochgeladen wurde, erwarten wir schnelles Feedback, dass mit unseren \u00c4nderungen alles in Ordnung ist. In der Regel umfasst CI das Ausf\u00fchren von statischen Codeanalyse-Tools sowie modulare\/internen API-Tests. Dies erm\u00f6glicht es, bereits wenige Sekunden\/Minuten nach der Durchf\u00fchrung unserer \u00c4nderungen Informationen \u00fcber unseren Code zu erhalten.<\/li>\n<li><strong>Continuous Delivery<\/strong> stellt einen fortschrittlicheren Schritt dar, bei dem wir Integrations-\/UI-Tests durchf\u00fchren. In dieser Phase erhalten wir jedoch nicht so schnell Ergebnisse wie im Fall von CI. Erstens ben\u00f6tigen diese Testarten mehr Zeit f\u00fcr die Durchf\u00fchrung. Zweitens m\u00fcssen wir vor dem Start unsere \u00c4nderungen in der Test-\/Staging-Umgebung bereitstellen. Dar\u00fcber hinaus kommt im Bereich der mobilen Entwicklung ein zus\u00e4tzlicher Schritt f\u00fcr die Erstellung unserer App-Version hinzu.<\/li>\n<li><strong>Continuous Deployment<\/strong> bedeutet, dass wir unsere \u00c4nderungen automatisch in die Produktion bereitstellen, sofern alle Abnahmetests in den vorherigen Phasen bestanden wurden. Dar\u00fcber hinaus k\u00f6nnen nach der Ver\u00f6ffentlichung verschiedene Schritte eingerichtet werden, wie das Ausf\u00fchren von Smoke-Tests in der Produktion und das Sammeln relevanter Metriken. Continuous Deployment ist nur bei guter Abdeckung durch automatisierte Tests m\u00f6glich. Wenn manuelle Eingriffe, einschlie\u00dflich Testungen, erforderlich sind, sprechen wir nicht mehr von <u>Continuous<\/u> (kontinuierlich). Dann k\u00f6nnen wir sagen, dass unsere Pipeline nur der Praxis des Continuous Delivery entspricht.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\n In diesem Abschnitt m\u00f6chte ich klarstellen, dass wir bei end-to-end UI-Tests davon ausgehen, dass wir unsere \u00c4nderungen und die zugeh\u00f6rigen Dienste in Testumgebungen bereitstellen m\u00fcssen. Continuous Integration ist f\u00fcr diese Aufgabe nicht anwendbar, und wir m\u00fcssen sicherstellen, dass wir mindestens Continuous Delivery-Praktiken implementieren. Continuous Deployment macht auch Sinn im Kontext von UI-Tests, wenn wir planen, diese in der Produktion auszuf\u00fchren.<\/p>\n<p>Bevor wir uns das Diagramm zur Architekturanpassung ansehen, m\u00f6chte ich ein paar Worte zu GitLab CI sagen. Im Gegensatz zu anderen CI\/CD-Tools bietet GitLab ein entferntes Repository und viele weitere Zusatzfunktionen. Daher ist GitLab mehr als nur CI. Es umfasst von Haus aus die Verwaltung des Quellcodes, agile Verwaltung, CI\/CD-Pipelines, Logging-Tools und die Erhebung von Metriken. Die Architektur von GitLab besteht aus GitLab CI\/CD und GitLab Runner. Hier eine kurze Beschreibung von der offiziellen Website:<\/p>\n<blockquote><p>GitLab CI\/CD ist eine Webanwendung mit einer API, die ihren Zustand in einer Datenbank speichert, Projekte\/Bauten verwaltet und eine Benutzeroberfl\u00e4che bereitstellt. GitLab Runner ist eine Anwendung, die Builds verarbeitet. Sie kann separat bereitgestellt werden und arbeitet \u00fcber eine API mit GitLab CI\/CD zusammen. F\u00fcr das Ausf\u00fchren von Tests ben\u00f6tigen Sie sowohl eine GitLab-Instanz als auch einen Runner.<\/p><\/blockquote>\n<p><\/p>\n<h3>Illustration des aktuellen Infrastrukturstatus<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/a05ece39b6c6a9aaec4177d4b5242722.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Ressourcen zum Lernen<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/articles\/continuousIntegration.html\">Martin Fowler: Continuous Integration<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/ci\/\">GitLab CI\/CD<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Continuous-Integration-Improving-Software-Reducing\/dp\/0321336380\">Continuous Integration Buch<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Continuous-Delivery-Deployment-Automation-Addison-Wesley-ebook-dp-B003YMNVC0\/dp\/B003YMNVC0\/ref=mt_kindle?_encoding=UTF8&amp;me=&amp;qid=\">Continuous Delivery Buch<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c4hnliche Werkzeuge<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/\">Jenkins<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/teamcity\/\">TeamCity<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/travis-ci.com\/\">Travis<\/a><\/noindex>\u00a0<\/li>\n<li>Und viele andere<\/li>\n<\/ul>\n<p><\/p>\n<h2>5. Cloud-Plattformen<\/h2>\n<p><\/p>\n<h3>Kurze Beschreibung der Technologie<\/h3>\n<p>\n In diesem Abschnitt sprechen wir \u00fcber einen beliebten Trend, der als \u201a\u00f6ffentliche Clouds\u2018 bekannt ist. Trotz der enormen Vorteile, die die oben beschriebenen Technologien der Virtualisierung und Containerisierung bieten, ben\u00f6tigen wir nach wie vor Rechenressourcen. Unternehmen erwerben teure Server oder mieten Rechenzentren, aber in solchen F\u00e4llen m\u00fcssen oft unrealistische Berechnungen angestellt werden, wie viele Ressourcen wir ben\u00f6tigen, ob wir sie rund um die Uhr nutzen werden und zu welchen Zwecken. Zum Beispiel ben\u00f6tigt eine Produktionsumgebung einen Server, der rund um die Uhr verf\u00fcgbar ist, aber ben\u00f6tigen wir \u00e4hnliche Ressourcen f\u00fcr Tests au\u00dferhalb der Arbeitszeiten? Das h\u00e4ngt auch von der Art der durchgef\u00fchrten Tests ab. Ein Beispiel k\u00f6nnten Last- oder Stresstests sein, die wir in den Nichtarbeitsstunden durchf\u00fchren, um am n\u00e4chsten Tag Ergebnisse zu erhalten. Aber sicher ist, dass eine rund um die Uhr Verf\u00fcgbarkeit der Server nicht f\u00fcr End-to-End-Automatisierungstests und insbesondere f\u00fcr manuelle Testumgebungen erforderlich ist. F\u00fcr solche Situationen w\u00e4re es ideal, nur nach Bedarf so viele Ressourcen zu erhalten, wie n\u00f6tig, diese zu nutzen und die Zahlungen einzustellen, wenn sie nicht mehr ben\u00f6tigt werden. Dar\u00fcber hinaus w\u00e4re es gro\u00dfartig, sie sofort zu erhalten, indem man ein paar Mausklicks macht oder ein paar Skripte ausf\u00fchrt. Genau daf\u00fcr werden \u00f6ffentliche Clouds eingesetzt. Lassen Sie uns die Definition ansehen:<\/p>\n<blockquote><p>\u201eDie \u00f6ffentliche Cloud wird definiert als Computerleistungen, die von Drittanbietern \u00fcber das \u00f6ffentliche Internet angeboten werden, sodass sie f\u00fcr jeden verf\u00fcgbar sind, der sie nutzen oder erwerben m\u00f6chte. Sie k\u00f6nnen kostenlos oder nach Bedarf verkauft werden, sodass die Kunden nur f\u00fcr die CPU-Zyklen, den Speicher oder die Bandbreite bezahlen, die sie verbrauchen.\u201c<\/p><\/blockquote>\n<p>\n Es besteht die Auffassung, dass \u00f6ffentliche Clouds teuer sind. Doch die zentrale Idee dahinter ist die Senkung der Unternehmensausgaben. Wie bereits erw\u00e4hnt, erm\u00f6glichen \u00f6ffentliche Clouds den Zugriff auf Ressourcen nach Bedarf und die Zahlung nur f\u00fcr die Zeit, in der sie genutzt werden. Zudem vergessen wir manchmal, dass Mitarbeiter Geh\u00e4lter beziehen und Fachkr\u00e4fte ebenfalls teure Ressourcen sind. Es ist zu ber\u00fccksichtigen, dass \u00f6ffentliche Clouds die Verwaltung der Infrastruktur erheblich erleichtern, sodass Ingenieure sich auf wichtigere Aufgaben konzentrieren k\u00f6nnen.\u00a0<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\n Welche spezifischen Ressourcen ben\u00f6tigen wir f\u00fcr End-to-End-UI-Tests? Haupts\u00e4chlich handelt es sich um virtuelle Maschinen oder Cluster (wir werden in der n\u00e4chsten Sektion \u00fcber Kubernetes sprechen), um Browser und Emulatoren auszuf\u00fchren. Je mehr Browser und Emulatoren wir gleichzeitig starten m\u00f6chten, desto mehr CPU und RAM werden ben\u00f6tigt, und desto mehr Geld m\u00fcssen wir daf\u00fcr ausgeben. In diesem Zusammenhang erm\u00f6glichen \u00f6ffentliche Clouds bei der Automatisierung von Tests, eine gro\u00dfe Anzahl (100, 200, 1000 \u2026) von Browsern\/Emulatoren nach Bedarf zu starten, die Testergebnisse so schnell wie m\u00f6glich zu erhalten und nicht mehr f\u00fcr solche wahnsinnig ressourcenintensiven Kapazit\u00e4ten zu bezahlen.\u00a0<\/p>\n<p>Die bekanntesten Cloud-Anbieter sind Amazon Web Services (AWS), Microsoft Azure und Google Cloud Platform (GCP). In diesem praktischen Leitfaden finden Sie Beispiele f\u00fcr die Nutzung von GCP, wobei es im Grunde genommen jedoch unerheblich ist, welchen Anbieter Sie f\u00fcr Automatisierungsaufgaben verwenden. Sie bieten alle weitgehend dieselben Funktionen. Bei der Auswahl eines Anbieters konzentriert sich die Anleitung in der Regel auf die gesamte Infrastruktur des Unternehmens und die gesch\u00e4ftlichen Anforderungen, was den Rahmen dieses Artikels sprengt. F\u00fcr Automatisierungsingenieure ist es interessanter, die Nutzung von Cloud-Anbietern mit spezifischen Cloud-Plattformen zu vergleichen, die f\u00fcr Testzwecke wie Sauce Labs, BrowserStack, BitBar usw. verwendet werden. Lassen Sie uns das also ebenfalls tun! Meiner Meinung nach ist Sauce Labs die bekannteste Plattform f\u00fcr Cloud-Testing, weshalb ich sie f\u00fcr den Vergleich gew\u00e4hlt habe.\u00a0<\/p>\n<p><u>GCP gegen Sauce Labs f\u00fcr Automatisierungszwecke:<\/u><\/p>\n<p>Angenommen, wir m\u00fcssen gleichzeitig 8 Web-Tests und 8 Android-Tests durchf\u00fchren. Dazu verwenden wir GCP und starten 2 virtuelle Maschinen mit Selenoid. Auf der ersten erstellen wir 8 Container mit Browsern. Auf der zweiten 8 Container mit Emulatoren. Schauen wir uns die Preise an:\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/e4688fd2e6e5593d2e1c22fc57f59484.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Um einen Container mit Chrome zu starten, ben\u00f6tigen wir <strong>n1-standard-1 <\/strong>eine Maschine. Bei Android handelt es sich um <strong>n1-standard-4 <\/strong>einen Emulator. Tats\u00e4chlich ist eine flexiblere und kosteng\u00fcnstigere Methode, spezifische Benutzerwerte f\u00fcr CPU\/Memory anzugeben, jedoch ist dies derzeit f\u00fcr den Vergleich mit Sauce Labs nicht entscheidend.<\/p>\n<p>Hier sind die Tarife f\u00fcr die Nutzung von Sauce Labs:<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIch nehme an, Sie haben bereits den Unterschied bemerkt, aber ich werde dennoch eine Tabelle mit Berechnungen f\u00fcr unsere Aufgabe anf\u00fchren:<\/p>\n<p><strong>Ben\u00f6tigte Ressourcen<\/strong><br \/>\n<strong>Monatlich<\/strong><br \/>\n<strong>Arbeitsstunden<\/strong><strong>(8 Uhr - 20 Uhr)<\/strong><br \/>\n<strong>Arbeitsstunden<\/strong><strong>+ Preemptible<\/strong><\/p>\n<p><strong>GCP f\u00fcr Web<\/strong><br \/>\nn1-standard-1 x 8 = n1-standard-8<br \/>\n$194.18<br \/>\n23 Tage * 12h * 0.38 = 104.88$\u00a0<br \/>\n23 Tage * 12h * 0.08 = 22.08$<\/p>\n<p><strong>Sauce Labs f\u00fcr Web<\/strong><br \/>\nVirtuelle Cloud mit 8 parallelen Tests<br \/>\n$1.559<br \/>\n&#8212;<br \/>\n&#8212;<\/p>\n<p><strong>GCP f\u00fcr Android<\/strong><br \/>\nn1-standard-4 x 8: n1-standard-16<br \/>\n$776.72<br \/>\n23 Tage * 12h * 1.52 = 419.52$\u00a0<br \/>\n23 Tage * 12h * 0.32 = 88.32$<\/p>\n<p><strong>Sauce Labs f\u00fcr Android<\/strong><br \/>\nReal Device Cloud mit 8 parallelen Tests<br \/>\n$1.999<br \/>\n&#8212;<br \/>\n&#8212;<\/p>\n<p>\nWie man sieht, ist der Kostenunterschied riesig, insbesondere wenn man die Tests nur im Arbeitszeitfenster von zw\u00f6lf Stunden durchf\u00fchrt. Aber man kann die Ausgaben noch weiter senken, wenn man preemptible Maschinen verwendet. Was genau ist das?<\/p>\n<blockquote><p>Eine preemptible VM ist eine Instanz, die man zu einem viel niedrigeren Preis als normale Instanzen erstellen und betreiben kann. Allerdings kann das Compute Engine diese Instanzen beenden (preempt), wenn es auf diese Ressourcen f\u00fcr andere Aufgaben zugreifen muss. Preemptible Instanzen sind \u00fcbersch\u00fcssige Kapazit\u00e4ten von Compute Engine, daher variiert deren Verf\u00fcgbarkeit je nach Nutzung.<\/p>\n<p>Wenn Ihre Anwendungen ausfallsicher sind und m\u00f6gliche Instanzunterbrechungen \u00fcberstehen k\u00f6nnen, k\u00f6nnen vor\u00fcbergehende Instanzen Ihre Compute Engine-Kosten erheblich senken. Beispielsweise k\u00f6nnen Batchverarbeitungsjobs auf vor\u00fcbergehenden Instanzen ausgef\u00fchrt werden. Wenn einige dieser Instanzen w\u00e4hrend der Verarbeitung beendet werden, verlangsamt sich der Job, stoppt jedoch nicht vollst\u00e4ndig. Vor\u00fcbergehende Instanzen erledigen Ihre Batchverarbeitungsaufgaben, ohne eine zus\u00e4tzliche Last auf Ihren bestehenden Instanzen zu erzeugen und ohne dass Sie den vollen Preis f\u00fcr zus\u00e4tzliche normale Instanzen zahlen m\u00fcssen.<\/p><\/blockquote>\n<p>\n Und das ist noch nicht alles! Tats\u00e4chlich bin ich mir sicher, dass niemand Tests \u00fcber 12 Stunden ohne Unterbrechung durchf\u00fchrt. Und wenn dem so ist, k\u00f6nnen Sie virtuelle Maschinen automatisch starten und stoppen, wenn sie nicht ben\u00f6tigt werden. Die tats\u00e4chliche Nutzungszeit kann auf 6 Stunden pro Tag sinken. Dann w\u00fcrde die Bezahlung in unserem Kontext auf bis zu 11 $ pro Monat f\u00fcr 8 Browser sinken. Ist das nicht gro\u00dfartig? Aber bei vor\u00fcbergehenden Maschinen m\u00fcssen wir vorsichtig sein und auf Unterbrechungen und instabile Operationen vorbereitet sein, auch wenn diese Situationen vorhergesehen und programmatisch behandelt werden k\u00f6nnen. Es lohnt sich!<\/p>\n<p>Aber ich sage auf keinen Fall: 'Verwenden Sie niemals Cloud-Testfarmen'. Sie bieten eine Reihe von Vorteilen. Vor allem sind sie nicht nur virtuelle Maschinen, sondern vollst\u00e4ndige L\u00f6sungen zur Automatisierung von Tests, die eine Reihe von Funktionen out-of-the-box bieten: Remote-Zugriff, Protokolle, Screenshots, Videoaufzeichnung, verschiedene Browser und physische mobile Ger\u00e4te. In vielen Situationen kann dies eine unverzichtbare, luxuri\u00f6se Alternative sein. Besonders Testplattformen sind n\u00fctzlich f\u00fcr die IOS-Automatisierung, da \u00f6ffentliche Clouds nur Linux-\/Windows-Systeme anbieten k\u00f6nnen. Aber das Thema IOS wird in kommenden Artikeln behandelt. Ich empfehle, die Situation stets zu betrachten und sich an den Aufgaben zu orientieren: In einigen F\u00e4llen ist es g\u00fcnstiger und effizienter, \u00f6ffentliche Clouds zu nutzen, w\u00e4hrend in anderen F\u00e4llen Testplattformen definitiv das investierte Geld wert sind.<\/p>\n<h3>Illustration des aktuellen Infrastrukturstatus<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/f68770c9e27677b9d762af574726c90e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Ressourcen zum Lernen<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/gcp\/\">GCP<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/docs\/instances\/preemptible\">GCP: Preemptible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/vm-instance-pricing\">GCP: VM-Preise<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/saucelabs.com\/pricing\">SauceLabs<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.inovex.de\/blog\/comparing-cloud-providers\/\">Cloud-Anbieter vergleichen<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c4hnliche Tools:<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/\">AWS<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/azure.microsoft.com\/en-us\/\">Azure<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>6. Orchestrierung<\/h2>\n<p><\/p>\n<h3>Kurze Beschreibung der Technologie<\/h3>\n<p>\n Ich habe gute Nachrichten \u2013 wir stehen kurz vor dem Ende des Artikels! Derzeit besteht unsere Automatisierungsinfrastruktur aus Web- und Android-Tests, die wir parallel \u00fcber GitLab CI ausf\u00fchren, unter Verwendung von Docker-unterst\u00fctzten Tools: Selenium Grid und Selenoid. Dar\u00fcber hinaus nutzen wir die \u00fcber GCP erstellten virtuellen Maschinen, um Container mit Browsern und Emulatoren zu starten. Um Kosten zu senken, fahren wir diese virtuellen Maschinen nur auf Abruf hoch und stoppen sie, wenn keine Tests durchgef\u00fchrt werden. Gibt es noch etwas, das unsere Infrastruktur verbessern k\u00f6nnte? Die Antwort lautet: Ja! Begr\u00fc\u00dfen wir Kubernetes (K8s)!<\/p>\n<p>Zun\u00e4chst betrachten wir, wie die Begriffe Orchestrierung, Cluster und Kubernetes miteinander verbunden sind. Auf hoher Ebene ist Orchestrierung ein System, das Anwendungen bereitstellt und verwaltet. Automatisierte Tests von containerisierten Anwendungen wie Selenium Grid und Selenoid sind dabei von Bedeutung. Docker und K8s erg\u00e4nzen sich hierbei. Docker wird zur Bereitstellung von Anwendungen verwendet, w\u00e4hrend K8s f\u00fcr die Orchestrierung verantwortlich ist. K8s selbst bildet somit ein Cluster. Die Aufgabe eines Clusters besteht darin, VMs als Nodes zu nutzen, was es erm\u00f6glicht, verschiedene Funktionen, Programme und Dienste innerhalb eines Servers (Clusters) zu installieren. F\u00e4llt einer der Nodes aus, \u00fcbernehmen andere Nodes, was unserer Anwendung einen unterbrechungsfreien Betrieb garantiert. Dar\u00fcber hinaus bietet K8s wichtige Funktionen im Zusammenhang mit dem Skalieren, wodurch wir automatisch die optimale Anzahl an Ressourcen basierend auf der Last und den festgelegten Einschr\u00e4nkungen erhalten.<\/p>\n<p>Ehrlich gesagt ist das manuelle Einrichten von Kubernetes von Grund auf eine alles andere als triviale Aufgabe. Ich werde einen Link zu dem bekannten Praktikumsleitfaden \u201eKubernetes The Hard Way\u201c hinterlassen; wenn Sie interessiert sind, k\u00f6nnen Sie es ausprobieren. Aber zum Gl\u00fcck gibt es alternative Methoden und Werkzeuge. Die einfachste davon ist die Verwendung von Google Kubernetes Engine (GKE) in GCP, mit der Sie einen einsatzbereiten Cluster nach nur wenigen Klicks erhalten. F\u00fcr den Einstieg empfehle ich diesen Ansatz, da Sie sich auf das Lernen konzentrieren k\u00f6nnen, wie Sie K8s f\u00fcr Ihre Aufgaben nutzen, anstatt herauszufinden, wie die internen Komponenten integriert werden sollten.\u00a0<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\nLassen Sie uns einige bedeutende Funktionen betrachten, die K8s bietet:<\/p>\n<ul>\n<li>Anwendungsbereitstellung: Verwendung eines Multi-Node-Clusters anstelle von VMs;<\/li>\n<li>Dynamische Skalierung: senkt die Kosten f\u00fcr Ressourcen, die nur bei Bedarf genutzt werden;<\/li>\n<li>Selbstheilung (Self-healing): automatisches Wiederherstellen von Pods (wodurch auch die Container wiederhergestellt werden);<\/li>\n<li>Rollen von Updates und Rollbacks ohne Ausfallzeiten: Das Aktualisieren von Tools, Browsern und Emulatoren unterbricht nicht die Arbeit der aktuellen Benutzer.<\/li>\n<\/ul>\n<p>\n Aber K8s ist immer noch keine Allesk\u00f6nnerl\u00f6sung. Um die Vorteile und Einschr\u00e4nkungen im Kontext der betrachteten Tools (Selenium Grid, Selenoid) zu verstehen, lassen Sie uns die Struktur von K8s kurz er\u00f6rtern. Ein Cluster enth\u00e4lt zwei Arten von Nodes: Master Nodes und Worker Nodes. Master Nodes sind f\u00fcr das Management, die Bereitstellung und die Planungsentscheidungen verantwortlich. Worker Nodes sind die, auf denen die Anwendungen laufen. Nodes enthalten auch die Container-Laufumgebung. In unserem Fall ist das Docker, das f\u00fcr containerbezogene Operationen zust\u00e4ndig ist. Es gibt jedoch auch alternative L\u00f6sungen, wie<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containerd\/containerd\"> containerd<\/a><\/noindex>. Es ist wichtig zu verstehen, dass Skalierung oder Selbstheilung nicht direkt auf Container zutrifft. Dies wird durch das Hinzuf\u00fcgen\/Reduzieren der Anzahl von Pods realisiert, die wiederum Container enthalten (normalerweise ein Container pro Pod, aber je nach Aufgabe k\u00f6nnen es auch mehr sein). Die hierarchische Struktur auf hoher Ebene besteht aus Worker Nodes, in denen Pods enthalten sind, in denen Container betrieben werden.<\/p>\n<p>Die Skalierungsfunktion ist entscheidend und kann sowohl auf Nodes innerhalb eines Cluster-Node-Pools als auch auf Pods innerhalb eines Nodes angewendet werden. Es gibt zwei Arten der Skalierung, die sowohl f\u00fcr Nodes als auch f\u00fcr Pods gelten. Der erste Typ ist die horizontale Skalierung, die durch die Erh\u00f6hung der Anzahl von Nodes\/Pods erfolgt. Diese Art ist vorzuziehen. Der zweite Typ ist entsprechend die vertikale Skalierung, bei der die Gr\u00f6\u00dfe von Nodes\/Pods erh\u00f6ht wird, nicht deren Anzahl.<\/p>\n<p>Lassen Sie uns nun unsere Werkzeuge im Kontext der zuvor genannten Begriffe betrachten.<\/p>\n<p><u>Selenium Grid<\/u><\/p>\n<p>Wie bereits erw\u00e4hnt, ist Selenium Grid ein sehr beliebtes Tool, und es ist nicht \u00fcberraschend, dass es containerisiert wurde. Daher ist es wenig \u00fcberraschend, dass Selenium Grid in K8s bereitgestellt werden kann. Ein Beispiel daf\u00fcr, wie man das macht, findet sich im offiziellen K8s-Repository. Wie \u00fcblich f\u00fcge ich am Ende des Abschnitts Links bei. Zus\u00e4tzlich wird in der praktischen Anleitung gezeigt, wie dies mit Terraform durchgef\u00fchrt werden kann. Es gibt auch eine Anleitung dazu, wie man die Anzahl der Pods, die Container mit Browsern enthalten, skalieren kann. Allerdings bleibt die Funktion der automatischen Skalierung im Kontext von K8s eine noch nicht ganz eindeutige Aufgabe. Als ich anfing, mich damit zu besch\u00e4ftigen, fand ich kein praktisches Handbuch oder Empfehlungen. Nach mehreren Studien und Experimenten mit Unterst\u00fctzung des DevOps-Teams w\u00e4hlten wir den Ansatz, Container mit den ben\u00f6tigten Browsern innerhalb eines Pods zu starten, der sich auf einem Worker-Node befindet. Diese Methode erm\u00f6glicht es uns, die Strategie der horizontalen Skalierung der Nodes zu verfolgen, indem wir deren Anzahl erh\u00f6hen. Ich hoffe, dass sich die Situation in Zukunft \u00e4ndert und wir immer mehr Beschreibungen der besten Ans\u00e4tze und fertigen L\u00f6sungen sehen, insbesondere nach der Ver\u00f6ffentlichung von Selenium Grid 4 mit einer ver\u00e4nderten internen Architektur.<\/p>\n<p><u>Selenoid<\/u>:<\/p>\n<p>Derzeit ist die Bereitstellung von Selenoid in K8s die gr\u00f6\u00dfte Entt\u00e4uschung. Sie sind nicht kompatibel. Theoretisch k\u00f6nnen wir den Selenoid-Container innerhalb eines Pods starten, aber wenn Selenoid beginnt, Container mit Browsern zu starten, befinden sich diese immer noch innerhalb desselben Pods. Das macht das Scaling unm\u00f6glich, und als Ergebnis wird die Arbeit von Selenoid innerhalb des Clusters nicht anders sein als die Arbeit innerhalb einer virtuellen Maschine. Ende der Geschichte.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>In Anbetracht dieses Engpasses beim Arbeiten mit Selenoid haben die Entwickler ein leistungsf\u00e4higeres Werkzeug geschaffen, das sie Moon genannt haben. Dieses Werkzeug wurde urspr\u00fcnglich f\u00fcr die Arbeit mit Kubernetes entworfen und erm\u00f6glicht daher die Nutzung der Autoskalierungsfunktion. Dar\u00fcber hinaus w\u00fcrde ich sagen, dass es derzeit <u>die einzige<\/u> das Werkzeug in der Welt von Selenium ist, das standardm\u00e4\u00dfig native K8s-Cluster-Unterst\u00fctzung bietet (<i>nicht mehr, siehe folgendes Werkzeug <\/i>). Ein entscheidendes Merkmal von Moon, das diese Unterst\u00fctzung bietet, ist:\u00a0<\/p>\n<blockquote><p>V\u00f6llig zustandslos. Selenoid speichert Informationen \u00fcber aktuell laufende Browsersitzungen im Speicher. Wenn aus irgendeinem Grund sein Prozess abst\u00fcrzt, sind alle laufenden Sitzungen verloren. Im Gegensatz dazu hat Moon keinen internen Zustand und kann \u00fcber Rechenzentren hinweg repliziert werden. Browsersitzungen bleiben aktiv, auch wenn eine oder mehrere Replikate ausfallen.<\/p><\/blockquote>\n<p>Moon ist eine gro\u00dfartige L\u00f6sung, hat jedoch ein Problem: Es ist nicht kostenlos. Der Preis h\u00e4ngt von der Anzahl der Sitzungen ab. Kostenlos kann man nur 0-4 Sitzungen starten, was nicht besonders n\u00fctzlich ist. Ab der f\u00fcnften Sitzung muss man dann 5 $ f\u00fcr jede zus\u00e4tzliche Sitzung bezahlen. Die Situation kann von Unternehmen zu Unternehmen unterschiedlich sein, aber in unserem Fall ist die Nutzung von Moon sinnlos. Wie bereits erw\u00e4hnt, k\u00f6nnen wir VMs mit Selenium Grid nach Bedarf starten oder die Anzahl der Nodes im Cluster erh\u00f6hen. F\u00fcr einen Pipeline starten wir ungef\u00e4hr 500 Browser und stoppen alle Ressourcen nach Abschluss der Tests. Wenn wir Moon verwenden w\u00fcrden, m\u00fcssten wir zus\u00e4tzlich 500 x 5 = 2500 $ pro Monat bezahlen, unabh\u00e4ngig davon, wie oft wir die Tests ausf\u00fchren. Und nochmals, ich sage nicht: \"Nutzen Sie Moon nicht.\" F\u00fcr Ihre Aufgaben k\u00f6nnte es eine unverzichtbare L\u00f6sung sein, insbesondere wenn Sie in Ihrer Organisation viele Projekte\/Teams haben und einen gro\u00dfen gemeinsamen Cluster f\u00fcr alle ben\u00f6tigen. Wie immer hinterlasse ich den Link am Ende und empfehle, alle notwendigen Berechnungen im Kontext Ihrer speziellen Aufgaben vorzunehmen.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Achtung! Dies ist nicht im Originalartikel enthalten und findet sich nur in der russischen \u00dcbersetzung.<\/strong><\/i>)<\/p>\n<p>Wie ich bereits sagte, ist Selenium ein sehr beliebtes Werkzeug, und die IT-Branche entwickelt sich rasant. W\u00e4hrend ich mit der \u00dcbersetzung besch\u00e4ftigt war, erschien ein neues vielversprechendes Werkzeug namens Callisto (Hallo Cypress und andere Selenium-Killer). Es funktioniert nativ mit K8s und erm\u00f6glicht das Starten von Selenoid-Containern in Pods, verteilt \u00fcber Nodes. Alles funktioniert sofort out-of-the-box, inklusive automatischer Skalierung. Fantastisch, aber es ist notwendig, es zu testen. Ich konnte dieses Werkzeug bereits einrichten und einige Experimente durchf\u00fchren. Aber es ist zu fr\u00fch, um Schlussfolgerungen zu ziehen. Nach Erhalt der Ergebnisse auf lange Sicht werde ich m\u00f6glicherweise eine \u00dcbersicht in zuk\u00fcnftigen Artikeln machen. Bis dahin lasse ich nur Links f\u00fcr eigenst\u00e4ndige Recherchen.\u00a0\u00a0<\/p>\n<h3>Illustration des aktuellen Infrastrukturstatus<\/p>\n<h3><img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/c9c2ffd21df2a261947df809dcec7108.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Ressourcen zum Lernen<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/setup\/\">Kubernetes: Einrichtung<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\">Kubernetes: der harte Weg<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/examples\/tree\/master\/staging\/selenium\">Kubernetes: Selenium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/kubernetes-engine\">GCP: Kubernetes-Engine<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aerokube.com\/moon\/latest\/\">Moon<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Kubernetes-Book-Version-November-2018-ebook\/dp\/B072TS9ZQZ\/ref=pd_sim_351_1\/147-1129855-1615632?_encoding=UTF8&amp;pd_rd_i=B072TS9ZQZ&amp;pd_rd_r=489f0d27-dd2c-4e33-b23c-a420affcba5d&amp;pd_rd_w=HLjs5&amp;pd_rd_wg=eGbU7&amp;pf_rd_p=bab57536-7c8f-4781-a8ed-3e270b9cd303&amp;pf_rd_r=G71DN3V8127KHPXQ6JFN&amp;psc=1&amp;refRID=G71DN3V8127KHPXQ6JFN\">Das Kubernetes-Buch<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MmdGyqNqs9w\">Verteilte Automatisierung mit Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/Selenium-Grid-4\">Selenium Grid 4<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wrike\/callisto\">Callisto GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/software-testing.ru\/events\/review\/3317-wrike-techclub\">Wrike TechClub (Callisto)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c4hnliche Werkzeuge<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/get-started\/swarm-deploy\/\">Docker Swarm<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mesosphere.github.io\/marathon\/\">Marathon<\/a><\/noindex>\u00a0<\/li>\n<\/ul>\n<p><\/p>\n<h2>7. Infrastruktur als Code (IaC)<\/h2>\n<p><\/p>\n<h3>Kurze Beschreibung der Technologie<\/h3>\n<p>\n Und nun sind wir beim letzten Abschnitt angekommen. In der Regel fallen diese Technologien und die damit verbundenen Aufgaben nicht in den Verantwortungsbereich von Automatisierungsingenieuren. Daf\u00fcr gibt es mehrere Gr\u00fcnde. Erstens, in vielen Organisationen fallen infrastrukturelle Fragen in den Aufgabenbereich des DevOps-Teams, und die Entwicklungsteams k\u00fcmmern sich nicht wirklich darum, wie die Pipeline funktioniert und wie alles, was damit zusammenh\u00e4ngt, aufrechterhalten werden muss. Zweitens, um ehrlich zu sein, wird die Praxis \"Infrastructure as Code (IaC)\" in vielen Unternehmen noch nicht umgesetzt. Dennoch hat sich dies definitiv zu einem beliebten Trend entwickelt, und es ist wichtig, sich um die damit verbundenen Prozesse, Ans\u00e4tze und Werkzeuge zu bem\u00fchen. Oder zumindest auf dem Laufenden zu bleiben.<\/p>\n<p>Lassen Sie uns mit den Gr\u00fcnden f\u00fcr diesen Ansatz beginnen. Wir haben bereits besprochen, dass wir f\u00fcr den Start von Tests in GitLab CI mindestens Ressourcen f\u00fcr den Betrieb des GitLab Runners ben\u00f6tigen. Zum Start von Containern mit Browsern\/Emulatoren m\u00fcssen wir eine VM oder einen Cluster reservieren. Neben den Testressourcen ben\u00f6tigen wir betr\u00e4chtliche Kapazit\u00e4ten zur Unterst\u00fctzung von Entwicklungs-, Staging- und Produktionsumgebungen, einschlie\u00dflich Datenbanken, automatisierten Zeitpl\u00e4nen, Netzwerkkonfigurationen, Lastenausgleich, Benutzerrechten usw. Das zentrale Problem sind die erforderlichen Anstrengungen zur Pflege all dieser Komponenten. Es gibt mehrere M\u00f6glichkeiten, wie wir \u00c4nderungen vornehmen und Updates bereitstellen k\u00f6nnen. Beispielsweise k\u00f6nnen wir im Kontext von GCP die UI-Konsole im Browser verwenden und alle Aktionen per Mausklick durchf\u00fchren. Eine alternative Methode k\u00f6nnte die Nutzung von API-Aufrufen zur Interaktion mit Cloud-Entit\u00e4ten oder der Einsatz des Befehlszeilen-Tools gcloud sein, um die gew\u00fcnschten Manipulationen durchzuf\u00fchren. Doch bei einer wirklich Vielzahl von verschiedenen Entit\u00e4ten und infrastrukturellen Elementen wird es schwierig oder sogar unm\u00f6glich, alle Operationen manuell auszuf\u00fchren. Dar\u00fcber hinaus sind all diese manuellen Aktionen unkontrolliert. Wir k\u00f6nnen sie nicht zur \u00dcberpr\u00fcfung vor der Ausf\u00fchrung einreichen, ein Versionskontrollsystem nutzen oder schnell \u00c4nderungen zur\u00fccksetzen, die zu einem Vorfall gef\u00fchrt haben. Um solche Probleme zu l\u00f6sen, haben Ingenieure automatische Bash-\/Shell-Skripte entwickelt, was nicht viel besser ist als die vorherigen Methoden, da sie nicht so leicht schnell zu lesen, zu verstehen, zu warten und im prozeduralen Stil zu modifizieren sind.<\/p>\n<p>In diesem Artikel und praktischen Leitfaden verwende ich zwei Werkzeuge, die zur IaC-Praxis geh\u00f6ren: Terraform und Ansible. Einige glauben, dass es sinnlos ist, sie gleichzeitig zu verwenden, da ihre Funktionalit\u00e4t \u00e4hnlich ist und sie austauschbar sind. Doch urspr\u00fcnglich werden ihnen v\u00f6llig unterschiedliche Aufgaben zugewiesen. Der Fakt, dass diese Werkzeuge sich gegenseitig erg\u00e4nzen sollten, wurde auf einer gemeinsamen Pr\u00e4sentation von Entwicklern der Unternehmen HashiCorp und RedHat best\u00e4tigt. Der konzeptionelle Unterschied besteht darin, dass Terraform ein Provisioning-Tool zur Verwaltung der Server selbst ist. W\u00e4hrend Ansible ein Konfigurationsmanagement-Tool ist, dessen Aufgabe die Installation, Konfiguration und Verwaltung der Software auf diesen Servern ist.<\/p>\n<p>Ein weiteres Schl\u00fcsselmerkmal dieser Werkzeuge ist der Code-Stil. Im Gegensatz zu Bash und Ansible verwendet Terraform einen deklarativen Stil, der auf der Beschreibung des gew\u00fcnschten Endzustands basiert, der durch die Ausf\u00fchrung erreicht werden soll. Wenn wir zum Beispiel 10 VMs erstellen und die \u00c4nderungen \u00fcber Terraform anwenden, erhalten wir 10 VMs. Wenn wir das Skript erneut ausf\u00fchren, passiert nichts, da wir bereits 10 VMs haben und Terraform dies wei\u00df, weil es den aktuellen Zustand der Infrastruktur in einer Statusdatei speichert. Ansible hingegen verwendet einen prozeduralen Ansatz. Wenn wir es bitten, 10 VMs zu erstellen, erhalten wir beim ersten Durchlauf auch 10 VMs, \u00e4hnlich wie bei Terraform. Aber nach dem erneuten Ausf\u00fchren haben wir bereits 20 VMs. Das ist das wesentliche Unterscheidungsmerkmal. Im prozeduralen Stil speichern wir den aktuellen Zustand nicht und beschreiben einfach die Reihenfolge der Schritte, die ausgef\u00fchrt werden sollen. Nat\u00fcrlich k\u00f6nnen wir verschiedene Situationen behandeln, einige \u00dcberpr\u00fcfungen auf die Existenz von Ressourcen und den aktuellen Zustand hinzuf\u00fcgen, aber es macht wenig Sinn, unsere Zeit zu verschwenden und Aufwand in die Kontrolle dieser Logik zu stecken. Au\u00dferdem erh\u00f6ht dies das Risiko, Fehler zu machen.\u00a0<\/p>\n<p>Zusammenfassend l\u00e4sst sich sagen, dass Terraform mit seiner deklarativen Notation das geeignetste Werkzeug f\u00fcr die Bereitstellung von Servern ist. F\u00fcr das Konfigurationsmanagement hingegen ist es besser, Ansible zu delegieren. Nachdem wir das gekl\u00e4rt haben, lassen Sie uns Beispiele f\u00fcr den Einsatz im Kontext der Automatisierung betrachten.<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\n Hier ist es wichtig zu verstehen, dass die Infrastruktur f\u00fcr automatisierte Tests als Teil der gesamten Infrastruktur des Unternehmens betrachtet werden sollte. Das bedeutet, dass alle IaC-Praktiken global auf die Ressourcen der gesamten Organisation angewendet werden m\u00fcssen. Wer daf\u00fcr verantwortlich ist, h\u00e4ngt von Ihren Prozessen ab. Das DevOps-Team hat in diesen Fragen mehr Erfahrung und hat einen umfassenden \u00dcberblick \u00fcber die Situation. Allerdings sind QA-Ingenieure st\u00e4rker am Aufbau der Automatisierung und der Pipeline-Struktur beteiligt, was ihnen erm\u00f6glicht, alle notwendigen \u00c4nderungen und Verbesserungsm\u00f6glichkeiten besser zu erkennen. Die beste L\u00f6sung ist, gemeinsam zu arbeiten, Wissen und Ideen auszutauschen, um das gew\u00fcnschte Ergebnis zu erreichen.\u00a0<\/p>\n<p>Hier sind einige Beispiele f\u00fcr die Verwendung von Terraform und Ansible im Kontext der Testautomatisierung und der zuvor besprochenen Tools:<\/p>\n<p>1. Die erforderlichen Eigenschaften und Parameter von VMs und Clustern \u00fcber Terraform beschreiben.<\/p>\n<p>2. Die f\u00fcr die Tests erforderlichen Tools mit Ansible installieren: Docker, Selenoid, Selenium Grid und die ben\u00f6tigten Versionen von Browsern\/Emulatoren herunterladen.<\/p>\n<p>3. Die Eigenschaften der VM, in der der GitLab Runner ausgef\u00fchrt wird, \u00fcber Terraform beschreiben.<\/p>\n<p>4. Mit Ansible den GitLab Runner und die notwendigen begleitenden Tools installieren, Einstellungen und Konfigurationen festlegen.<\/p>\n<h3>Illustration des aktuellen Infrastrukturstatus<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/5d793a800a4ef62e181e6cb3a3f0544e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Ressourcen f\u00fcr weitere Studien:<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/\">Terraform<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\/\">Ansible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.hashicorp.com\/resources\/ansible-terraform-better-together\">Ansible und Terraform: ein perfektes Paar<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/a-comprehensive-guide-to-terraform-b3d32832baca\">Ein umfassender Leitfaden zu Terraform<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c\">Warum wir Terraform und nicht Chef, Puppet, Ansible, SaltStack oder CloudFormation verwenden<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/solutions\/infrastructure-as-code\">GCP: IaC<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c4hnliche Werkzeuge<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.chef.io\/\">Chef<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/\">Puppet<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/saltstack.com\/\">SaltStack<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a><\/noindex><\/li>\n<\/ul>\n<h2>Fassen wir zusammen!<\/h2>\n<p><\/p>\n<p><strong>Schritt<\/strong><br \/>\n<strong>Technologie<\/strong><br \/>\n<strong>Tools<\/strong><br \/>\n<strong>Wert f\u00fcr die Automatisierungsinfrastruktur<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nLokale Ausf\u00fchrung<br \/>\nNode.js, Selenium, Appium<\/p>\n<ul>\n<li>Die beliebtesten Tools f\u00fcr Web und Mobil<\/li>\n<li>Unterst\u00fctzung vieler Sprachen und Plattformen (einschlie\u00dflich Node.js)<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>2<\/strong><br \/>\nVersionskontrollsysteme\u00a0<br \/>\nGit<\/p>\n<ul>\n<li>\u00c4hnliche Vorteile wie in der Entwicklungsumgebung<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>3<\/strong><br \/>\nContainerisierung<br \/>\nDocker, Selenium Grid, Selenoid (Web, Android)<\/p>\n<ul>\n<li>Parallelbetrieb von Tests<\/li>\n<li>Isolierte Umgebungen<\/li>\n<li>Einfache, flexible Versionsaktualisierungen<\/li>\n<li>Dynamische Beendigung ungenutzter Ressourcen<\/li>\n<li>Einfach zu konfigurieren<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\n(geschrieben in<\/p>\n<ul>\n<li>Tests sind Teil des Prozesses<\/li>\n<li>Schnelles Feedback<\/li>\n<li>Sichtbarkeit f\u00fcr das gesamte Unternehmen \/ Team<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>5<\/strong><br \/>\nCloud-Plattformen<br \/>\nGoogle Cloud Platform<\/p>\n<ul>\n<li>Ressourcen nach Bedarf (wir zahlen nur, wenn wir sie brauchen)<\/li>\n<li>Einfach zu verwalten und zu aktualisieren<\/li>\n<li>Sichtbarkeit und Kontrolle \u00fcber alle Ressourcen<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>6<\/strong><br \/>\nOrchestrierung<br \/>\nKubernetes<br \/>\nIm Kontext von Containern mit Browsern\/Emulatoren innerhalb der Pods:<\/p>\n<ul>\n<li>Skalierung \/ automatisches Skalieren<\/li>\n<li>Selbstheilung<\/li>\n<li>Updates und Rollbacks ohne Unterbrechungen<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfrastructure as Code (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>\u00c4hnliche Vorteile mit der Entwicklungsinfrastruktur<\/li>\n<li>Alle Vorteile der Versionskontrolle<\/li>\n<li>\u00c4nderungen leicht einzuf\u00fchren und zu pflegen<\/li>\n<li>Vollst\u00e4ndig automatisiert<\/li>\n<\/ul>\n<p><\/p>\n<h2>Mindmap-Diagramme: Evolution der Infrastruktur<\/h2>\n<p>\nSchritt 1: Lokal<br \/>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/507908ba097a603adc3b301ab2f94a8d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Schritt 2: VCS<br \/>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/71c5170293d98375d8ab86d05eb47a33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Schritt 3: Containerisierung\u00a0<br \/>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/da33442a592851e07c3f5800c3ee9ead.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Schritt 4: CI\/CD\u00a0<br \/>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/900f18b45124412a1ad00d3901efb40e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Schritt 5: Cloud-Plattformen<br \/>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/840e5063141ac8787612e2fc46b5d690.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Schritt 6: Orchestrierung<br \/>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/4651b552efdc893695cbf359c6992e9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Schritt 7: IaC<br \/>\n<img decoding=\"async\" alt=\"DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/e784130f570260fc6c3aa263916e3db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Wie geht es weiter?<\/h2>\n<p>\nDas ist das Ende des Artikels. Aber zum Abschluss m\u00f6chte ich einige Vereinbarungen mit Ihnen treffen.<\/p>\n<p><u>Von Ihrer Seite<\/u><br \/>\n Wie zu Beginn erw\u00e4hnt, m\u00f6chte ich, dass der Artikel praktischen Nutzen bringt und Ihnen hilft, das erworbene Wissen in der Praxis anzuwenden. Hier nochmal<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> den Link zum praktischen Leitfaden<\/a><\/noindex>.<\/p>\n<p>Aber auch danach sollten Sie nicht aufh\u00f6ren, \u00fcben, lernen Sie die entsprechenden Links und B\u00fccher kennen, erfahren Sie, wie es in Ihrem Unternehmen funktioniert, finden Sie Verbesserungsm\u00f6glichkeiten und beteiligen Sie sich daran. Viel Gl\u00fcck!<\/p>\n<p><u>Von meiner Seite<\/u><\/p>\n<p>Aus der \u00dcberschrift geht hervor, dass dies nur der erste Teil war. Obwohl er recht umfangreich ist, wurden hier wichtige Themen noch nicht behandelt. Im zweiten Teil plane ich, die Automatisierungsinfrastruktur im Kontext von iOS zu betrachten. Aufgrund der Einschr\u00e4nkungen von Apple, die iOS-Simulatoren nur auf macOS-Systemen auszuf\u00fchren, ist unser L\u00f6sungsangebot eingeschr\u00e4nkt. Beispielsweise sind wir nicht in der Lage, Docker zum Starten des Simulators oder \u00f6ffentliche Clouds zum Ausf\u00fchren virtueller Maschinen zu verwenden. Aber das bedeutet nicht, dass es keine anderen Alternativen gibt. Ich werde versuchen, Sie \u00fcber moderne L\u00f6sungen und aktuelle Tools auf dem Laufenden zu halten!<\/p>\n<p>Au\u00dferdem habe ich einige bedeutende Themen im Zusammenhang mit dem Monitoring nicht erw\u00e4hnt. In Teil 3 werde ich die g\u00e4ngigsten Tools zur \u00dcberwachung der Infrastruktur sowie die Daten und Metriken er\u00f6rtern, die ber\u00fccksichtigt werden sollten.<\/p>\n<p>Und zum Schluss. In Zukunft plane ich, einen Videokurs zum Aufbau einer Testinfrastruktur und zu beliebten Werkzeugen herauszubringen. Derzeit gibt es im Internet viele Kurse und Vortr\u00e4ge \u00fcber DevOps, aber alle Materialien sind im Kontext der Entwicklung pr\u00e4sent und nicht der Testautomatisierung. In dieser Hinsicht ben\u00f6tige ich dringend Feedback, ob ein solcher Kurs f\u00fcr die Gemeinschaft der Tester und Automatisierer interessant und wertvoll w\u00e4re. Vielen Dank im Voraus!<\/h3>\n<\/h3>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497918\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\u00a0\u00abDevOps tools are not only for DevOps. Building test automation infrastructure from scratch\u00bb. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0441\u0441\u044b\u043b\u043a\u0438, \u0446\u0438\u0442\u0430\u0442\u044b \u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a. \u0416\u0435\u043b\u0430\u044e \u0432\u0430\u043c \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f! \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":78677,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-78676","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u00abDevOps tools are not only for DevOps. Building test automation infrastructure from scratch\u00bb. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0441\u0441\u044b\u043b\u043a\u0438, \u0446\u0438\u0442\u0430\u0442\u044b \u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a. \u0416\u0435\u043b\u0430\u044e \u0432\u0430\u043c \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f! \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47DevOps \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f DevOps. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u0443\u043b\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u00abDevOps tools are not only for DevOps. Building test automation infrastructure from scratch\u00bb. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0441\u0441\u044b\u043b\u043a\u0438, \u0446\u0438\u0442\u0430\u0442\u044b \u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a. \u0416\u0435\u043b\u0430\u044e \u0432\u0430\u043c \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f! \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-21T05:42:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-21T05:42:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47DevOps-Tools sind nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Testautomatisierungsinfrastruktur von Grund auf | ProHoster","description":"Teil 1: Web \/ Android Hinweis: Dieser Artikel ist eine \u00dcbersetzung des urspr\u00fcnglichen Artikels \u201eDevOps tools are not only for DevOps. Building test automation infrastructure from scratch\u201c. Alle Illustrationen, Links, Zitate und Begriffe bleiben jedoch in der Originalsprache erhalten, um Missverst\u00e4ndnisse bei der \u00dcbersetzung ins Russische zu vermeiden. Ich w\u00fcnsche Ihnen viel Spa\u00df beim Lernen! Derzeit ist der Beruf","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47DevOps \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f DevOps. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u0443\u043b\u044f | ProHoster","og:description":"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u00abDevOps tools are not only for DevOps. Building test automation infrastructure from scratch\u00bb. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0441\u0441\u044b\u043b\u043a\u0438, \u0446\u0438\u0442\u0430\u0442\u044b \u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a. \u0416\u0435\u043b\u0430\u044e \u0432\u0430\u043c \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f! \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-21T05:42:22+00:00","article:modified_time":"2020-04-21T05:42:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"78676","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:53:59","updated":"2022-10-05 06:14:03"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/78676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=78676"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/78676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/78677"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=78676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=78676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=78676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}