{"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 nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests 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 Originals 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 Testautomatisierungsstruktur von Grund auf.\u201c<\/i><\/a><\/noindex><i> Allerdings sind alle Illustrationen, Links, Zitate und Begriffe in der Originalsprache erhalten geblieben, 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 nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests 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 der Beruf DevOps einer der gefragtesten in der IT-Branche. Wenn Sie beliebte Jobportale aufrufen und die Gehaltsfilter setzen, werden Sie sehen, dass DevOps-Jobangebote ganz oben auf der Liste stehen. Es ist jedoch wichtig zu verstehen, dass dies haupts\u00e4chlich f\u00fcr die Position \u201eSenior\u201c gilt, was bedeutet, dass der Kandidat \u00fcber ein hohes F\u00e4higkeitsniveau, Kenntnisse in Technologien und Werkzeugen verf\u00fcgt. Dazu geh\u00f6rt auch ein hohes Ma\u00df an Verantwortung, das mit dem reibungslosen Betrieb von Produktionssystemen verbunden ist. Doch wir haben vergessen, was DevOps tats\u00e4chlich ist. Urspr\u00fcnglich war es keine bestimmte Person oder Abteilung. Wenn wir nach Definitionen dieses Begriffs suchen, finden wir viele sch\u00f6ne und zutreffende Substantive wie Methodologie, Praktiken, kulturelle Philosophie, Konzeptgruppe und so weiter.<\/p>\n<p>Meine Spezialisierung ist Ingenieur f\u00fcr Testautomatisierung (QA Automation Engineer), aber ich glaube, dass sie nicht nur mit dem Schreiben von automatisierten Tests oder der Entwicklung der Architektur eines Test-Frameworks verbunden sein sollte. Im Jahr 2020 sind Kenntnisse in Automatisierungsinfrastruktur ebenfalls notwendig. Dies erm\u00f6glicht es, den Automatisierungsprozess selbstst\u00e4ndig zu organisieren, beginnend mit dem Start der Tests und endend mit der Bereitstellung der Ergebnisse f\u00fcr alle Interessierten gem\u00e4\u00df den festgelegten Zielen. Daher sind DevOps-F\u00e4higkeiten ein entscheidender Faktor f\u00fcr die Ausf\u00fchrung dieser 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, da Unternehmen nicht bereit sind, viel Geld f\u00fcr etwas auszugeben, was leicht zu erledigen ist... In der Welt von DevOps gibt es eine gro\u00dfe Anzahl von Werkzeugen, Begriffen und Praktiken, die es zu beherrschen gilt. Besonders am Anfang der Karriere ist dies schwierig und h\u00e4ngt vom angesammelten technischen Wissen ab.<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests 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 wollen wir wohl mit der Einleitung abschlie\u00dfen und uns auf das Ziel dieses Artikels konzentrieren.\u00a0<\/p>\n<h3>Worum geht es in diesem Artikel<\/h3>\n<p>\nIn diesem Artikel m\u00f6chte ich meine Erfahrungen im Aufbau einer Infrastruktur f\u00fcr automatisiertes Testen 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 von Ihnen selbst niemand ausf\u00fchrt oder sich um deren Wartung k\u00fcmmert. Infolgedessen werden die Tests veraltet, und es muss Zeit aufgewendet werden, um sie zu aktualisieren. Zu Beginn der Karriere kann dies eine ziemlich herausfordernde Aufgabe sein: herauszufinden, welche Werkzeuge helfen sollten, dieses Problem zu l\u00f6sen, wie man sie ausw\u00e4hlt, einrichtet und wartet. Einige Tester wenden sich um Hilfe an DevOps (Menschen), und seien wir ehrlich, dieser Ansatz funktioniert. In vielen F\u00e4llen kann dies die einzige Option sein, da wir keinen \u00dcberblick \u00fcber alle Abh\u00e4ngigkeiten haben. Aber 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 ist Automatisierung nicht priorit\u00e4r. In diesem Fall sollten wir versuchen, alles M\u00f6gliche von unserer Seite aus von Anfang bis Ende zu tun. Das wird die Abh\u00e4ngigkeiten verringern, den Arbeitsablauf beschleunigen, unsere F\u00e4higkeiten verbessern und uns helfen, ein umfassenderes Bild von den Vorg\u00e4ngen zu bekommen.<\/p>\n<p>Der Artikel pr\u00e4sentiert die gefragtesten und popul\u00e4rsten Werkzeuge und zeigt, wie man sie f\u00fcr den schrittweisen Aufbau einer Automatisierungsinfrastruktur verwendet. Jede Gruppe wird durch Werkzeuge repr\u00e4sentiert, die auf pers\u00f6nlicher Erfahrung basieren. Das bedeutet jedoch nicht, dass Sie dasselbe verwenden sollten. Die Werkzeuge selbst sind nicht wichtig, sie kommen und veralten. Unsere ingenieurtechnische Aufgabe besteht darin, die grundlegenden Prinzipien zu verstehen: Warum ben\u00f6tigen wir diese Gruppe von Werkzeugen, und welche Arbeitsaufgaben k\u00f6nnen wir mit ihrer Hilfe l\u00f6sen? Daher lasse ich am Ende jedes Abschnitts Links zu \u00e4hnlichen Werkzeugen, die m\u00f6glicherweise in Ihrer Organisation verwendet werden.<\/p>\n<h3>Was in diesem Artikel nicht vorhanden ist<\/h3>\n<p>\nIch wiederhole noch einmal, dass der Artikel nicht \u00fcber spezifische Werkzeuge handelt, daher wird es hier keine Code-Snippets aus der Dokumentation und keine Beschreibung spezifischer Befehle geben. Aber am Ende jedes Abschnitts lasse ich Links f\u00fcr eine detaillierte Untersuchung.<\/p>\n<p>Dies geschieht aus folgendem Grund:\u00a0<\/p>\n<ul>\n<li>dieses Material ist sehr leicht in verschiedenen Quellen (Dokumentation, B\u00fccher, Video-Kurse) zu finden;<\/li>\n<li>wenn wir tiefer eintauchen, m\u00fcssten wir 10, 20, 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 verwenden m\u00f6chten, um die gleichen Ziele zu erreichen.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Praxis<\/h3>\n<p>\nIch w\u00fcrde mir sehr w\u00fcnschen, dass dieses Material f\u00fcr jeden Leser n\u00fctzlich ist und nicht einfach nur gelesen und vergessen wird. In jedem Lernen ist die Praxis ein sehr wichtiger Bestandteil. Daf\u00fcr habe ich vorbereitet<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> ein GitHub-Repository mit einer Schritt-f\u00fcr-Schritt-Anleitung, wie man alles von Grund auf neu macht<\/a><\/noindex>. Sie erwartet auch eine Hausaufgabe, um sicherzustellen, dass Sie nicht gedankenlos ausgef\u00fchrte Befehle kopiert haben. <\/p>\n<h3>Plan<\/h3>\n<p><\/p>\n<p><strong>Schritt<\/strong><br \/>\n<strong>Technologie<\/strong><br \/>\n<strong>Werkzeuge<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nLokale Ausf\u00fchrung (Bereiten Sie Web-\/Android-Demo-Tests vor und f\u00fchren Sie sie lokal aus)\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 \/>\nGitlab CI<\/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 \/>\nInfrastruktur als Code (IaC)<br \/>\nTerraform, Ansible<\/p>\n<p><\/p>\n<h3>Struktur jeder Sektion<\/h3>\n<p>\nUm den Erz\u00e4hlfluss anschaulich zu halten, ist jede Sektion nach folgendem Plan beschrieben:<\/p>\n<ul>\n<li>kurze Beschreibung der Technologie,<\/li>\n<li>Wert f\u00fcr die Automatisierungsinfrastruktur,<\/li>\n<li>Darstellung des aktuellen Zustands der Infrastruktur,<\/li>\n<li>Links zum Lernen,<\/li>\n<li>\u00e4hnliche Werkzeuge.<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. Lokale Ausf\u00fchrung von Tests<\/h2>\n<p><\/p>\n<h3>Kurze Beschreibung der Technologie<\/h3>\n<p>\nDies ist lediglich ein Vorbereitungsschritt, um Demo-Tests lokal auszuf\u00fchren und zu \u00fcberpr\u00fcfen, ob sie erfolgreich durchgef\u00fchrt werden. In dem praktischen Teil wird Node.js verwendet, jedoch ist die Programmiersprache und Plattform auch nicht wichtig und es k\u00f6nnen die verwendet werden, die in Ihrem Unternehmen genutzt werden.\u00a0<\/p>\n<p>Allerdings empfehle ich als Automatisierungswerkzeuge Selenium WebDriver f\u00fcr Web-Plattformen und Appium f\u00fcr die Android-Plattform, da wir in den n\u00e4chsten Schritten Docker-Images verwenden werden, die speziell f\u00fcr die Arbeit mit diesen Werkzeugen optimiert sind. Dar\u00fcber hinaus sind diese Werkzeuge, wie aus den Anforderungen in den Stellenangeboten ersichtlich ist, am meisten nachgefragt auf dem Markt.<\/p>\n<p>Wie Sie vielleicht bemerkt haben, betrachten wir nur Web- und Android-Tests. Leider ist iOS eine ganz andere Geschichte (Danke Apple). Ich plane, L\u00f6sungen und Praktiken zu iOS in den folgenden Teilen vorzustellen.<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\nAus der Sicht der Infrastruktur bringt ein lokaler Start keinen Wert. Sie \u00fcberpr\u00fcfen nur, ob die Tests auf der lokalen Maschine in den lokalen Browsern und Simulatoren funktionieren. Aber in jedem Fall ist dies ein notwendiger Ausgangspunkt.<\/p>\n<h3>Illustration des aktuellen Standes der Infrastruktur<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/504f28744e29938f66be41c32d9a7dc6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links 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 Tools<\/h3>\n<p><\/p>\n<ul>\n<li>jede Programmiersprache, die Ihnen gef\u00e4llt, in Verbindung mit Selenium\/Appium \u2013 Tests;<\/li>\n<li>beliebige Tests;<\/li>\n<li>jeder 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 Teil der Entwicklung, sowohl im Team als auch individuell, ist. Basierend auf verschiedenen Quellen kann man mit Sicherheit sagen, dass Git der beliebteste Vertreter ist. Das Versionskontrollsystem bietet viele Vorteile, wie Code-Sharing, Versionierung, Wiederherstellung fr\u00fcherer Branches, \u00dcberwachung der Projektgeschichte, Backups. Wir werden nicht jeden Punkt im Detail besprechen, da ich mir sicher bin, dass Sie damit gut vertraut sind und es in Ihrer t\u00e4glichen Arbeit verwenden. Aber falls nicht, empfehle ich, das Lesen dieses Artikels zu unterbrechen und so schnell wie m\u00f6glich diese L\u00fccke zu schlie\u00dfen.<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\n Und hier k\u00f6nnen Sie eine berechtigte Frage stellen: \u201eWarum erz\u00e4hlt er uns von Git? Das wissen doch alle und verwenden es sowohl f\u00fcr die Code-Entwicklung als auch f\u00fcr den Code von automatisierten Tests.\u201c Sie haben v\u00f6llig Recht, aber in diesem Artikel sprechen wir \u00fcber Infrastruktur, und dieser Abschnitt spielt eine Rolle als Vorschau auf Abschnitt 7: \u201eInfrastruktur als Code (IaC)\u201c. F\u00fcr uns bedeutet das, dass gesamte Infrastruktur, einschlie\u00dflich der Testinfrastruktur, in Form von Code beschrieben wird, was bedeutet, dass wir auch Versionskontrollsysteme anwenden k\u00f6nnen und die \u00e4hnlichen Vorteile wie f\u00fcr den Entwicklungs- und Automatisierungscode erhalten.<\/p>\n<p>Wir werden IaC im Schritt 7 ausf\u00fchrlicher betrachten, aber selbst jetzt k\u00f6nnen Sie Git lokal verwenden, indem Sie ein lokales Repository erstellen. Das Gesamtbild wird erweitert, wenn wir ein entferntes Repository zur Infrastruktur hinzuf\u00fcgen.<\/p>\n<h3>Illustration des aktuellen Standes der Infrastruktur<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/f17c1d2b2f18aa814c44f7c443e49416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links 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 Zur Versionskontrolle<\/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:\/\/subversion.apache.org\/\">. Jeder Checkpoint des FS ist ein Commit, der automatisch ohne Wissen des Benutzers bei jeder \u00c4nderung durchgef\u00fchrt wird: sei es bei der L\u00f6schung, der \u00c4nderung des Inhalts einer Datei oder der Zugriffsrechte. Jeder Commit hat eine Nummer, die linear steigt.<\/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 ge\u00e4ndert hat, machen wir einen Sprung mehrere Jahrzehnte zur\u00fcck. Damals kauften und nutzten die Menschen Servermaschinen zur Ausf\u00fchrung von Anwendungen. Doch in den meisten F\u00e4llen waren die ben\u00f6tigten Ressourcen f\u00fcr die Ausf\u00fchrung im Voraus nicht bekannt. Daher gaben Unternehmen Geld f\u00fcr den Kauf teurer, leistungsstarker Server aus, wobei ein Teil dieser Kapazit\u00e4ten nicht vollst\u00e4ndig ausgelastet war.<\/p>\n<p>Der n\u00e4chste Schritt in der Evolution waren virtuelle Maschinen (VM), die das Problem der Ausgaben f\u00fcr ungenutzte Ressourcen l\u00f6sten. Diese Technologie erm\u00f6glichte das parallele Ausf\u00fchren von Anwendungen auf einem einzigen Server, indem vollst\u00e4ndig isolierter Raum bereitgestellt wurde. Leider hat jede Technologie ihre Nachteile. Das Starten von VMs erfordert ein vollst\u00e4ndiges Betriebssystem, das CPU, RAM und Speicher verbraucht, und je nach OS m\u00fcssen Lizenzkosten ber\u00fccksichtigt werden. Diese Faktoren beeinflussen die Bootgeschwindigkeit und erschweren die Portabilit\u00e4t.<\/p>\n<p>Und hier kommen wir zur Containerisierung. Auch diese Technologie l\u00f6ste das vorherige Problem, denn Container verwenden kein vollst\u00e4ndiges Betriebssystem, was eine gro\u00dfe Menge an Ressourcen freisetzt und eine schnelle sowie flexible L\u00f6sung f\u00fcr die Portabilit\u00e4t bietet.<\/p>\n<p>Nat\u00fcrlich ist die Containertechnologie nichts Neues und wurde erstmals Ende der 70er Jahre vorgestellt. Damals gab es viele Forschungen, Entwicklungen und Versuche. Aber 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 unauff\u00e4llig Container innerhalb einer leichten Linux-VM. Wir werden dieses Thema noch einmal aufgreifen, wenn wir \u00fcber das Ausf\u00fchren von Android-Emulatoren in Containern sprechen, da hier ein sehr wichtiges Detail auftaucht, das wir n\u00e4her betrachten sollten.<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\n Wir haben festgestellt, dass Containerisierung und Docker gro\u00dfartige Technologien sind. Lassen Sie uns dies im Kontext der Automatisierung betrachten, denn jedes Werkzeug oder jede Technologie sollte ein Problem l\u00f6sen. Lassen Sie uns die offensichtlichen Probleme der Automatisierung von Tests im Kontext von UI-Tests identifizieren:<\/p>\n<ul>\n<li>eine riesige Anzahl von Abh\u00e4ngigkeiten bei der Installation von Selenium, insbesondere bei Appium;<\/li>\n<li>Kompatibilit\u00e4tsprobleme zwischen Versionen von Browsern, Simulatoren und Treibern;<\/li>\n<li>das Fehlen eines isolierten Raums f\u00fcr Browser\/Simulatoren, was besonders kritisch f\u00fcr paralleles Testen ist;<\/li>\n<li>schwierig zu verwalten und zu warten, wenn es notwendig ist, 10, 50, 100 oder sogar 1000 Browser gleichzeitig auszuf\u00fchren.<\/li>\n<\/ul>\n<p>\nDa Selenium jedoch das beliebteste Automatisierungswerkzeug und Docker das beliebteste Containerisierungstool ist, sollte es niemanden \u00fcberraschen, dass jemand versucht hat, diese beiden zu kombinieren, um ein leistungsstarkes Werkzeug zur L\u00f6sung der oben genannten Probleme zu schaffen. Lassen Sie uns solche L\u00f6sungen genauer betrachten.\u00a0<\/p>\n<p><u>Selenium Grid in Docker<\/u><\/p>\n<p>Dieses Tool ist das beliebteste der Welt f\u00fcr Selenium, um mehrere Browser auf mehreren Maschinen zu starten und von einem zentralen Knoten aus zu steuern. Um es zu starten, m\u00fcssen mindestens 2 Komponenten registriert werden: Hub und Node(s). Hub ist der zentrale Knoten, der alle Anfragen von Tests erh\u00e4lt und sie an die entsprechenden Nodes verteilt. F\u00fcr jeden Node k\u00f6nnen wir eine spezifische Konfiguration festlegen, indem wir den gew\u00fcnschten Browser und dessen Version angeben. Wir m\u00fcssen jedoch selbst f\u00fcr kompatible Treiber f\u00fcr die Browser sorgen und diese auf den ben\u00f6tigten Nodes installieren. Aus diesem Grund wird das Selenium Grid in seiner reinen Form nicht verwendet, es sei denn, wir m\u00fcssen mit Browsern arbeiten, die nicht auf Linux OS installiert werden k\u00f6nnen. F\u00fcr alle anderen F\u00e4lle ist es erheblich flexibler und sinnvoller, Docker-Images zu verwenden, um das Selenium Grid Hub und die Nodes zu starten. Dieser Ansatz vereinfacht das Management der Knoten erheblich, da wir das ben\u00f6tigte Image mit bereits installierten kompatiblen Browser- und Treiberversionen ausw\u00e4hlen k\u00f6nnen.<\/p>\n<p>Trotz negativer R\u00fcckmeldungen zur Stabilit\u00e4t, insbesondere beim gleichzeitigen Starten einer gro\u00dfen Anzahl von Nodes, bleibt das Selenium Grid immer noch das beliebteste Tool f\u00fcr den parallelen Start von Selenium-Tests. Es ist wichtig zu beachten, dass in der Open-Source-Welt st\u00e4ndig verschiedene Weiterentwicklungen und Modifikationen dieses Tools erscheinen, die gegen verschiedene Engp\u00e4sse angehen.<\/p>\n<p><u>Selenoid f\u00fcr Web<\/u><\/p>\n<p>Dieses Tool ist ein Durchbruch in der Welt von Selenium, da es sofort einsatzbereit ist und das Leben vieler Automatisierungsingenieure erheblich erleichtert hat. Zun\u00e4chst einmal handelt es sich nicht um eine weitere Modifikation von Selenium Grid. Stattdessen haben die Entwickler eine v\u00f6llig neue Version von Selenium Hub in der Programmiersprache Golang erstellt, was zusammen mit den leichten Docker-Images f\u00fcr verschiedene Browser einen Schub in der Entwicklung der Testautomatisierung gegeben hat. Dar\u00fcber hinaus m\u00fcssen wir im Fall von Selenium Grid alle ben\u00f6tigten Browser und deren Versionen im Voraus festlegen, was kein Problem darstellt, wenn man nur mit einem einzelnen Browser arbeitet. Doch wenn es um mehrere unterst\u00fctzte Browser geht, ist Selenoid die Nummer eins L\u00f6sung, dank der Funktion \u201eBrowser auf Abruf\u201c. Alles, was wir tun m\u00fcssen, ist, die ben\u00f6tigten Images mit den Browsern 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 entsprechenden Browser. Wenn der Test abgeschlossen ist, entfernt Selenoid den Container, wodurch Ressourcen f\u00fcr die n\u00e4chsten Anfragen freiwerden. Dieser Ansatz beseitigt vollst\u00e4ndig das bekannte Problem der \u201eVerfallenden Knoten\u201c, dem wir oft in Selenium Grid begegnen.<\/p>\n<p>Aber leider ist Selenoid noch keine Silberkugel. Wir haben die Funktion \u201eBrowser auf Abruf\u201c erhalten, jedoch ist die Funktion \u201eRessourcen auf Abruf\u201c weiterhin nicht verf\u00fcgbar. Um Selenoid zu nutzen, m\u00fcssen wir es auf physischer Hardware oder auf einer VM bereitstellen, was bedeutet, dass wir im Voraus wissen m\u00fcssen, wie viele Ressourcen wir zuweisen m\u00fcssen. Ich denke, das ist kein Problem f\u00fcr kleine Projekte, die 10, 20 oder sogar 30 Browser parallel betreiben. Aber was ist, wenn wir 100, 500, 1000 oder mehr ben\u00f6tigen? Es macht keinen Sinn, st\u00e4ndig so viele Ressourcen zu unterst\u00fctzen und zu bezahlen. In den Abschnitten 5 und 6 dieses Artikels werden wir L\u00f6sungen besprechen, die eine Skalierung erm\u00f6glichen und so die Ausgaben des Unternehmens erheblich senken.<\/p>\n<p><u>Selenoid f\u00fcr Android<\/u><\/p>\n<p>Nach dem Erfolg von Selenoid als Werkzeug zur Webautomatisierung wollten die Menschen etwas \u00c4hnliches f\u00fcr Android. Und das ist geschehen \u2013 Selenoid wurde mit Unterst\u00fctzung f\u00fcr Android ver\u00f6ffentlicht. Aus einer hochgradigen Benutzersicht ist das Prinzip \u00e4hnlich wie bei der 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 Werkzeug zum parallelen Ausf\u00fchren von Android-Tests.<\/p>\n<p>Ich m\u00f6chte wirklich nicht \u00fcber die negativen Seiten dieses Werkzeugs sprechen, da es mir wirklich gut gef\u00e4llt. Aber dennoch gibt es hier die gleichen Nachteile, die auch bei der Webautomatisierung mit Skalierung verbunden sind. Dar\u00fcber hinaus muss ich ein weiteres Einschr\u00e4nkung erw\u00e4hnen, die \u00fcberraschend sein kann, wenn wir das Werkzeug zum ersten Mal einrichten. Um Android-Images auszuf\u00fchren, ben\u00f6tigen wir eine physische Maschine oder eine VM mit unterst\u00fctzter verschachtelter Virtualisierung. In der praktischen Anleitung zeige ich, wie man dies auf einer Linux-VM aktiviert. Wenn Sie jedoch macOS-Benutzer sind und Selenoid lokal bereitstellen m\u00f6chten, wird es unm\u00f6glich sein, Android-Tests auszuf\u00fchren. Aber Sie k\u00f6nnen immer eine Linux-VM lokal mit aktivierter 'verschachtelter Virtualisierung' starten und Selenoid darin bereitstellen.<\/p>\n<h3>Illustration des aktuellen Standes der Infrastruktur<\/h3>\n<p>\n Im Kontext dieses Artikels f\u00fcgen wir 2 Werkzeuge hinzu, um die Infrastruktur zu veranschaulichen. Dies sind Selenium Grid f\u00fcr Web-Tests und Selenoid f\u00fcr Android-Tests. In der Anleitung auf GitHub werde ich auch zeigen, wie man Selenoid verwendet, um Web-Tests auszuf\u00fchren.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/1202ae79eba9cffc965f3a5b2648c755.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links 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 Container-Alternativen zu Docker<\/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-Konfiguration 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 Tools<\/h3>\n<p><\/p>\n<ul>\n<li>Es gibt andere Containerisierungswerkzeuge, aber Docker ist das popul\u00e4rste. Wenn Sie etwas anderes ausprobieren m\u00f6chten, beachten Sie, dass die Werkzeuge, die wir f\u00fcr die parallele Ausf\u00fchrung von Selenium-Tests behandelt haben, nicht sofort funktionieren werden.\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 ziemlich popul\u00e4r und steht auf einer Stufe mit Versionskontrollsystemen. Trotzdem habe ich das Gef\u00fchl, dass es Verwirrung in der Terminologie gibt. In diesem Absatz m\u00f6chte ich drei Varianten dieser Technologie aus meiner Sicht beschreiben. Im Internet k\u00f6nnen Sie viele Artikel mit unterschiedlichen Interpretationen finden, und es ist vollkommen in Ordnung, 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 \u2013 Continuous Integration (kontinuierliche Integration), CD \u2013 Continuous Delivery (kontinuierliche Bereitstellung) und wieder CD \u2013 Continuous Deployment (kontinuierliches Deployment). (<i>Ich werde diese Begriffe k\u00fcnftig auf Englisch verwenden<\/i>). Jede Variante f\u00fcgt Ihrer Entwicklungs-Pipeline einige zus\u00e4tzliche Schritte hinzu. Aber das Wort <u>continuous<\/u> (kontinuierlich) ist das Hauptmerkmal. In diesem Kontext beziehen wir uns auf etwas, das von Anfang bis Ende ohne Unterbrechungen oder manuelle Eingriffe erfolgt. Schauen wir uns CI &amp; CD sowie CD in diesem Kontext an.<\/p>\n<ul>\n<li><strong>Continuous Integration \u2013<\/strong> ist der erste Schritt in der Evolution. Nachdem neuer Code auf den Server hochgeladen wurde, erwarten wir eine schnelle R\u00fcckmeldung, dass mit unseren \u00c4nderungen alles in Ordnung ist. Normalerweise beinhaltet CI die Ausf\u00fchrung von statischen Code-Analyse-Tools und Unit-\/API-Tests. Dies erm\u00f6glicht es uns, bereits nach wenigen Sekunden\/Minuten Informationen \u00fcber unseren Code zu erhalten.<\/li>\n<li><strong>Continuous Delivery<\/strong> ist ein fortgeschrittener Schritt, bei dem wir Integrations-\/UI-Tests durchf\u00fchren. Allerdings erhalten wir an dieser Stelle 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 unsere \u00c4nderungen in einer Test-\/Staging-Umgebung bereitstellen, bevor wir sie ausf\u00fchren. Zudem gibt es im Bereich der mobilen Entwicklung einen zus\u00e4tzlichen Schritt zur Erstellung des Builds unserer Anwendung.<\/li>\n<li><strong>Continuous Deployment<\/strong> Es wird davon ausgegangen, dass wir unsere \u00c4nderungen automatisch in der Produktion (Release) ver\u00f6ffentlichen, wenn alle Abnahmetests in den vorherigen Phasen bestanden wurden. Zus\u00e4tzlich kann nach der Release-Phase eine Reihe verschiedener Schritte eingerichtet werden, wie das Ausf\u00fchren von Smoke-Tests in der Produktion und das Sammeln interessanter Metriken. Continuous Deployment ist nur bei guter Abdeckung durch automatisierte Tests m\u00f6glich. Wenn manuelle Eingriffe erforderlich sind, einschlie\u00dflich Tests, ist es nicht mehr <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, wenn wir von End-to-End-UI-Tests sprechen, dies bedeutet, 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 uns darum k\u00fcmmern, mindestens die Praktiken des Continuous Delivery einzuf\u00fchren. Continuous Deployment ist auch im Kontext von UI-Tests sinnvoll, wenn wir beabsichtigen, sie in der Produktion auszuf\u00fchren.<\/p>\n<p>Und bevor wir uns die Illustration der Architektur\u00e4nderung ansehen, m\u00f6chte ich ein paar Worte \u00fcber GitLab CI sagen. Im Gegensatz zu anderen CI\/CD-Tools bietet GitLab ein Remote-Repository und viele weitere zus\u00e4tzliche Funktionen. Somit ist GitLab mehr als nur CI. Es umfasst out-of-the-box die Verwaltung von Quellcode, Agile-Management, CI\/CD-Pipelines, Logging-Tools und das Sammeln von Metriken. Die Architektur von GitLab besteht aus GitLab CI\/CD und dem GitLab Runner. Hier ist 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 und Builds verwaltet und eine Benutzeroberfl\u00e4che bereitstellt. GitLab Runner ist eine Anwendung, die Builds verarbeitet. Er 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 Standes der Infrastruktur<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/a05ece39b6c6a9aaec4177d4b5242722.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links 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\">Buch \u00fcber Continuous Integration<\/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=\">Buch \u00fcber Continuous Delivery<\/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:\/\/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 '\u00f6ffentliche Cloud' bezeichnet wird. Trotz des enormen Nutzens, den die oben beschriebenen Virtualisierungs- und Containerisierungstechnologien bieten, ben\u00f6tigen wir weiterhin Rechenressourcen. Unternehmen erwerben teure Server oder mieten Rechenzentren, m\u00fcssen jedoch in solchen F\u00e4llen Berechnungen (manchmal unrealistisch) anstellen, um festzustellen, wie viele Ressourcen wir ben\u00f6tigen, ob wir sie 24\/7 nutzen werden und zu welchen Zwecken. Zum Beispiel ben\u00f6tigt die Produktion einen rund um die Uhr funktionierenden Server, aber brauchen wir \u00e4hnliche Ressourcen f\u00fcr Tests au\u00dferhalb der Arbeitszeiten? Das h\u00e4ngt auch von der Art der durchgef\u00fchrten Tests ab. Belastungs-\/Stresstests, die wir planen, au\u00dferhalb der Arbeitszeiten durchzuf\u00fchren, um die Ergebnisse am n\u00e4chsten Tag zu erhalten, sind ein Beispiel. Aber sicherlich wird f\u00fcr End-to-End-Autotests und insbesondere f\u00fcr manuelle Testumgebungen keine 24\/7-Verf\u00fcgbarkeit der Server ben\u00f6tigt. F\u00fcr solche Situationen w\u00e4re es ideal, genau die Ressourcen nach Bedarf zu erhalten, sie zu nutzen und nicht mehr zu zahlen, 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. Daf\u00fcr werden \u00f6ffentliche Clouds genutzt. Lassen Sie uns die Definition betrachten:<\/p>\n<blockquote><p>\u201eDie \u00f6ffentliche Cloud wird definiert als Rechenleistungen, die von Drittanbietern \u00fcber das \u00f6ffentliche Internet angeboten werden und f\u00fcr jeden zug\u00e4nglich 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 gibt die Meinung, dass \u00f6ffentliche Clouds teuer sind. Aber ihre zentrale Idee ist die Reduzierung der Unternehmensausgaben. Wie bereits erw\u00e4hnt, erm\u00f6glichen \u00f6ffentliche Clouds den Zugriff auf Ressourcen nach Bedarf und das Bezahlen nur f\u00fcr die Dauer ihrer Nutzung. Au\u00dferdem vergessen wir manchmal, dass Mitarbeiter Geh\u00e4lter erhalten und Fachkr\u00e4fte ebenfalls eine teure Ressource darstellen. Es ist zu ber\u00fccksichtigen, dass \u00f6ffentliche Clouds die Unterst\u00fctzung der Infrastruktur erheblich erleichtern, wodurch die Ingenieure sich auf wichtigere Aufgaben konzentrieren k\u00f6nnen.\u00a0<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\n Welche konkreten Ressourcen ben\u00f6tigen wir f\u00fcr End-to-End-UI-Tests? Haupts\u00e4chlich 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 Speicher ben\u00f6tigen wir und desto mehr Geld m\u00fcssen wir daf\u00fcr ausgeben. Somit erm\u00f6glichen \u00f6ffentliche Clouds im Kontext der Testautomatisierung, eine gro\u00dfe Anzahl (100, 200, 1000 \u2026) von Browsern\/Emulatoren nach Bedarf zu starten, Testergebnisse so schnell wie m\u00f6glich zu erhalten und nicht f\u00fcr solch ressourcenintensive Kapazit\u00e4ten zu zahlen.\u00a0<\/p>\n<p>Die beliebtesten Cloud-Anbieter sind Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). In der praktischen Anleitung werden Beispiele f\u00fcr die Nutzung von GCP vorgestellt, aber insgesamt ist es unwichtig, was genau Sie f\u00fcr Automatisierungsaufgaben verwenden werden. Sie bieten alle ungef\u00e4hr die gleiche Funktionalit\u00e4t. Normalerweise konzentriert sich die Auswahl des Anbieters auf die gesamte Infrastruktur des Unternehmens und die Gesch\u00e4ftsanforderungen, was \u00fcber den Rahmen dieses Artikels hinausgeht. F\u00fcr Automatisierungsingenieure ist es interessanter, die Nutzung von Cloud-Anbietern mit der Nutzung von Cloud-Plattformen speziell f\u00fcr Testzwecke zu vergleichen, wie Sauce Labs, BrowserStack, BitBar und so weiter. Also lassen Sie uns das tun! Meiner Meinung nach ist Sauce Labs die bekannteste Farm f\u00fcr Cloud-Tests, deshalb habe ich sie f\u00fcr den Vergleich ausgew\u00e4hlt.\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. Daf\u00fcr verwenden wir GCP und starten 2 virtuelle Maschinen mit Selenoid. Auf der ersten werden wir 8 Container mit Browsern hochfahren. Auf der zweiten \u2013 8 Container mit Emulatoren. Schauen wir uns die Preise an:\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests 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>Maschine. Im Falle von Android wird es sein <strong>mit automatischer Skalierung der Nodes (mindestens 4, maximal 16). <\/strong>f\u00fcr einen Emulator. Tats\u00e4chlich ist es eine flexiblere und kosteng\u00fcnstigere M\u00f6glichkeit, spezifische Benutzerwerte f\u00fcr CPU\/Memory festzulegen, aber momentan ist das f\u00fcr den Vergleich mit Sauce Labs nicht entscheidend.<\/p>\n<p>Hier sind die Preise f\u00fcr die Nutzung von Sauce Labs:<\/p>\n<p><img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIch nehme an, Sie haben den Unterschied bereits bemerkt, aber ich werde dennoch eine Tabelle mit Berechnungen f\u00fcr unsere Aufgabenstellung anf\u00fchren:<\/p>\n<p><strong>Ben\u00f6tigte Ressourcen<\/strong><br \/>\n<strong>Monatlich<\/strong><br \/>\n<strong>Arbeitsstunden<\/strong><strong>(8 Uhr \u2014 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 das Web<\/strong><br \/>\nVirtuelle Cloud8 parallele Tests<br \/>\n$1.559<br \/>\n\u2014<br \/>\n\u2014<\/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 \/>\nEchter Ger\u00e4te-Cloud 8 parallele Tests<br \/>\n$1.999<br \/>\n\u2014<br \/>\n\u2014<\/p>\n<p>\nWie man sieht, ist der Preisunterschied enorm, insbesondere wenn Tests nur im regul\u00e4ren zw\u00f6lfst\u00fcndigen Zeitraum durchgef\u00fchrt werden. Aber man kann die Kosten noch weiter senken, wenn man vor\u00fcbergehende Maschinen verwendet. Was ist das genau?<\/p>\n<blockquote><p>Eine vor\u00fcbergehende VM ist eine Instanz, die Sie zu einem viel g\u00fcnstigeren Preis als normale Instanzen erstellen und betreiben k\u00f6nnen. Allerdings k\u00f6nnte das Compute Engine diese Instanzen (vor\u00fcbergehend) beenden, wenn es Zugriff auf diese Ressourcen f\u00fcr andere Aufgaben ben\u00f6tigt. Vor\u00fcbergehende Instanzen sind \u00fcbersch\u00fcssige Kapazit\u00e4ten des Compute Engine, sodass ihre Verf\u00fcgbarkeit je nach Nutzung variiert.<\/p>\n<p>Wenn Ihre Apps fehlertolerant sind und m\u00f6gliche Instanzunterbrechungen verkraften k\u00f6nnen, k\u00f6nnen vor\u00fcbergehende Instanzen Ihre Compute Engine-Kosten erheblich senken. Beispielsweise k\u00f6nnen Batch-Verarbeitungsjobs auf vor\u00fcbergehenden Instanzen ausgef\u00fchrt werden. Wenn einige dieser Instanzen w\u00e4hrend der Verarbeitung beendet werden, verlangsamt sich der Job, stoppt aber nicht vollst\u00e4ndig. Vor\u00fcbergehende Instanzen schlie\u00dfen Ihre Batch-Verarbeitungsaufgaben ab, ohne zus\u00e4tzliche Arbeitslast auf Ihren vorhandenen Instanzen zu legen 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 das Ende! Tats\u00e4chlich bin ich mir sicher, dass niemand Tests 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 Zahlung im Kontext unserer Aufgabe auf gerade einmal 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 Betriebsbedingungen vorbereitet sein, obwohl diese Situationen programmiert vorausgesehen und behandelt werden k\u00f6nnen. Es ist es wert!<\/p>\n<p>Aber ich sage auf keinen Fall 'verwenden Sie niemals Cloud-Testfarmen'. Sie haben zahlreiche Vorteile. Vor allem sind sie nicht einfach nur virtuelle Maschinen, sondern eine umfassende L\u00f6sung f\u00fcr die Automatisierung von Tests mit einem umfangreichen Funktionsumfang direkt aus der Box: Fernzugriff, Protokolle, Screenshots, Videoaufzeichnung, verschiedene Browser und physische Mobilger\u00e4te. In vielen Situationen kann das eine unverzichtbare gro\u00dfartige Alternative sein. Besonders Testplattformen sind hilfreich f\u00fcr iOS-Automatisierung, wenn \u00f6ffentliche Clouds nur Linux-\/Windows-Systeme anbieten k\u00f6nnen. Aber das Gespr\u00e4ch \u00fcber iOS wird in den n\u00e4chsten Artikeln stattfinden. Ich empfehle immer, die Situation zu betrachten und von den Aufgaben auszugehen: In einigen F\u00e4llen ist es g\u00fcnstiger und effektiver, \u00f6ffentliche Clouds zu nutzen, w\u00e4hrend in anderen Testplattformen den ausgegebenen Geldbetrag eindeutig wert sind.<\/p>\n<h3>Illustration des aktuellen Standes der Infrastruktur<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/f68770c9e27677b9d762af574726c90e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links 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: Vor\u00fcbergehende<\/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\/\">Vergleich von Cloud-Anbietern<\/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:\/\/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 sind fast am Ende des Artikels! Derzeit besteht unsere Automatisierungsinfrastruktur aus Web- und Android-Tests, die wir parallel \u00fcber GitLab CI ausf\u00fchren, indem wir Docker-unterst\u00fctzende Werkzeuge verwenden: Selenium Grid und Selenoid. Dar\u00fcber hinaus nutzen wir durch GCP erstellte virtuelle Maschinen, um Container mit Browsern und Emulatoren zu betreiben. Um die Kosten zu senken, starten wir diese virtuellen Maschinen nur auf Anfrage und stoppen sie, wenn keine Tests durchgef\u00fchrt werden. Gibt es noch etwas, das unsere Infrastruktur verbessern kann? Die Antwort ist ja! Willkommen Kubernetes (K8s)!<\/p>\n<p>Lassen Sie uns zun\u00e4chst betrachten, wie die Begriffe Orchestrierung, Cluster und Kubernetes miteinander verbunden sind. Auf hoher Ebene ist Orchestrierung ein System, das Anwendungen bereitstellt und verwaltet. F\u00fcr die Automatisierung von Tests sind solche containerisierten Anwendungen Selenium Grid und Selenoid. Docker und K8s erg\u00e4nzen sich gegenseitig. Ersteres wird zur Bereitstellung von Anwendungen verwendet, Letzteres zur Orchestrierung. K8s ist seinerseits ein Cluster. Die Aufgabe des Clusters besteht darin, VMs als Knoten zu verwenden, was es erm\u00f6glicht, verschiedene Funktionen, Programme und Dienste innerhalb eines Servers (Clusters) zu installieren. Wenn einer der Knoten ausf\u00e4llt, \u00fcbernehmen andere Knoten, was unserem Anwendung einen unterbrechungsfreien Betrieb gew\u00e4hrleistet. Zus\u00e4tzlich verf\u00fcgt K8s \u00fcber wichtige Funktionen in Bezug auf das Skalieren, wodurch wir automatisch die optimale Menge an Ressourcen entsprechend der Auslastung und den festgelegten Grenzen erhalten.<\/p>\n<p>Um ehrlich zu sein, ist das manuelle Einrichten von Kubernetes von Grund auf eine ganz und gar nicht triviale Aufgabe. Ich lasse einen Link zu dem bekannten praktischen Leitfaden \"Kubernetes The Hard Way\" da, und wenn es Sie interessiert, k\u00f6nnen Sie etwas \u00fcben. Aber zum Gl\u00fcck gibt es alternative Methoden und Werkzeuge. Die einfachste davon ist die Verwendung von Google Kubernetes Engine (GKE) in GCP, was es erm\u00f6glicht, nach wenigen Klicks einen einsatzbereiten Cluster zu erhalten. F\u00fcr den Einstieg empfehle ich, genau diesen Ansatz zu verwenden, da er Ihnen erlaubt, sich auf das Lernen zu konzentrieren, wie man K8s f\u00fcr seine Aufgaben nutzen kann, anstatt zu erforschen, 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: Reduziert die Kosten f\u00fcr Ressourcen, die nur bei Bedarf genutzt werden;<\/li>\n<li>Selbstheilung: Automatische Wiederherstellung von Pods (die somit auch die Container wiederherstellen);<\/li>\n<li>Rollout von Updates und R\u00fcckrollungen ohne Ausfallzeiten: Die Aktualisierung von Werkzeugen, Browsern und Emulatoren unterbricht nicht den Betrieb der aktuellen Benutzer.<\/li>\n<\/ul>\n<p>\n Aber K8s ist immer noch keine Silberkugel. Um alle Vorteile und Einschr\u00e4nkungen im Kontext der von uns betrachteten Werkzeuge (Selenium Grid, Selenoid) zu verstehen, lassen Sie uns kurz die Struktur von K8s besprechen. Ein Cluster besteht aus zwei Arten von Nodes: Master Nodes und Worker Nodes. Master Nodes sind f\u00fcr das Management, die Bereitstellung und die Scheduling-Entscheidungen verantwortlich. Worker Nodes sind das, wo die Anwendungen laufen. Nodes enthalten auch die Ausf\u00fchrungsumgebung f\u00fcr Container. In unserem Fall ist das Docker, das f\u00fcr containerbezogene Operationen verantwortlich ist. Aber es gibt auch alternative L\u00f6sungen, wie zum Beispiel<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 zutreffen. Dies wird durch das Hinzuf\u00fcgen\/Reduzieren der Anzahl von Pods realisiert, die wiederum Container enthalten (typischerweise ein Container pro Pod, aber je nach Aufgabe k\u00f6nnen es auch mehr sein). Die hochrangige Hierarchie besteht aus Worker Nodes, in denen sich Pods befinden, in denen die Container laufen.<\/p>\n<p>Die Funktion der Skalierung ist entscheidend und kann sowohl auf Nodes innerhalb des Cluster-Node-Pools als auch auf Pods innerhalb des Nodes angewendet werden. Es gibt zwei Arten der Skalierung, die sich sowohl auf Nodes als auch auf Pods beziehen. Der erste Typ \u2013 die horizontale Skalierung \u2013 erfolgt durch die Erh\u00f6hung der Anzahl der Nodes\/Pods. Dieser Typ ist bevorzugt. Der zweite Typ ist entsprechend die vertikale Skalierung. Bei der vertikalen Skalierung werden die Gr\u00f6\u00dfen der Nodes\/Pods erh\u00f6ht, nicht deren Anzahl.<\/p>\n<p>Lassen Sie uns nun unsere Werkzeuge im Kontext der oben genannten Begriffe betrachten.<\/p>\n<p><u>Selenium Grid<\/u><\/p>\n<p>Wie bereits erw\u00e4hnt, ist das Selenium Grid ein sehr beliebtes Tool, und es ist keine \u00dcberraschung, dass es containerisiert wurde. Daher ist es auch nicht \u00fcberraschend, dass das Selenium Grid in K8s bereitgestellt werden kann. Ein Beispiel daf\u00fcr, wie das geht, findet sich im offiziellen K8s-Repository. Wie gewohnt f\u00fcge ich am Ende des Abschnitts Links hinzu. Dar\u00fcber hinaus wird in der praktischen Anleitung gezeigt, wie dies mit Terraform durchgef\u00fchrt werden kann. Es gibt auch eine Anleitung, wie die Anzahl der Pods skaliert werden kann, die Container mit Browsern enthalten. Aber die Funktion der automatischen Skalierung im Kontext von K8s ist nach wie vor eine nicht ganz offensichtliche Aufgabe. Als ich mit dem Lernen begann, fand ich keine praktische Anleitung oder Empfehlungen. Nach mehreren Recherchen und Experimenten mit Unterst\u00fctzung des DevOps-Teams w\u00e4hlten wir den Ansatz, Container mit den ben\u00f6tigten Browsern innerhalb eines Pods, der sich innerhalb eines Worker-Nodes befindet, zu erstellen. Dieser Ansatz erm\u00f6glicht es uns, eine Strategie der horizontalen Skalierung von Nodes durch die Erh\u00f6hung ihrer Anzahl anzuwenden. 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 bereitstellen, aber wenn Selenoid beginnt, Container mit Browsern zu starten, befinden sich diese immer noch innerhalb desselben Pods. Dies macht das Scaling unm\u00f6glich, und folglich wird die Ausf\u00fchrung von Selenoid innerhalb des Clusters nicht anders sein als die Ausf\u00fchrung innerhalb einer virtuellen Maschine. Ende der Geschichte.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>In Anbetracht dieses Engpasses bei der Arbeit mit Selenoid haben die Entwickler ein leistungsf\u00e4higeres Tool namens Moon ver\u00f6ffentlicht. Dieses Tool wurde urspr\u00fcnglich f\u00fcr die Arbeit mit Kubernetes konzipiert und erm\u00f6glicht es, die Funktion des automatischen Skalierens effektiv zu nutzen. Dar\u00fcber hinaus w\u00fcrde ich sagen, dass es derzeit das <u>die einzige<\/u> Tool in der Welt von Selenium ist, das sofort native K8s-Cluster-Unterst\u00fctzung hat (<i>gibt es nicht mehr, siehe das n\u00e4chste Tool <\/i>). Ein Schl\u00fcsselelement 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 der Prozess abst\u00fcrzt, gehen alle laufenden Sitzungen verloren. Moon hingegen hat keinen internen Zustand und kann \u00fcber Rechenzentren hinweg repliziert werden. Browsersitzungen bleiben aktiv, auch wenn eine oder mehrere Replikate ausfallen.<\/p><\/blockquote>\n<p>Also, Moon ist eine gro\u00dfartige L\u00f6sung, hat aber 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 5 $ pro Sitzung zahlen. Die Situation kann von Unternehmen zu Unternehmen unterschiedlich sein, aber in unserem Fall macht die Nutzung von Moon keinen Sinn. Wie oben beschrieben, k\u00f6nnen wir VMs mit Selenium Grid bei Bedarf starten oder die Anzahl der Knoten im Cluster erh\u00f6hen. F\u00fcr eine Pipeline starten wir ungef\u00e4hr 500 Browser und stoppen s\u00e4mtliche Ressourcen nach Abschluss der Tests. Wenn wir Moon verwenden w\u00fcrden, m\u00fcssten wir zus\u00e4tzliche 500 x 5 = 2500 $ pro Monat zahlen, unabh\u00e4ngig davon, wie oft wir die Tests ausf\u00fchren. Und nochmals, ich sage nicht \u201everwenden Sie Moon nicht\u201c. F\u00fcr Ihre Aufgaben kann es eine unverzichtbare L\u00f6sung sein, zum Beispiel, wenn Sie in Ihrer Organisation viele Projekte\/Teams haben und einen riesigen gemeinsamen Cluster f\u00fcr alle ben\u00f6tigen. Wie immer hinterlasse ich am Ende den Link und empfehle, alle erforderlichen Berechnungen im Kontext Ihrer Aufgaben vorzunehmen.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Achtung! Dies ist nicht im Originalartikel enthalten und steht nur in der russischen \u00dcbersetzung.<\/strong><\/i>)<\/p>\n<p>Wie ich bereits sagte, ist Selenium ein sehr beliebtes Tool und der IT-Sektor entwickelt sich rasant. W\u00e4hrend ich an der \u00dcbersetzung arbeitete, tauchte ein neues vielversprechendes Tool namens Callisto auf (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, einschlie\u00dflich automatischer Skalierung. Fantastisch, aber es muss getestet werden. Es ist mir bereits gelungen, dieses Tool bereitzustellen und einige Experimente durchzuf\u00fchren. Aber es ist noch zu fr\u00fch f\u00fcr Schlussfolgerungen; nachdem ich Ergebnisse \u00fcber einen l\u00e4ngeren Zeitraum erhalten habe, werde ich vielleicht in zuk\u00fcnftigen Artikeln eine \u00dcbersicht geben. Ich hinterlasse vorerst nur Links f\u00fcr eigenst\u00e4ndige Recherchen.\u00a0\u00a0<\/p>\n<h3>Illustration des aktuellen Standes der Infrastruktur<\/p>\n<h3><img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/c9c2ffd21df2a261947df809dcec7108.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links 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 Tools<\/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. Normalerweise geh\u00f6ren diese Technologien und die damit verbundenen Aufgaben nicht zum Verantwortungsbereich von Automatisierungsingenieuren. Daf\u00fcr gibt es eigene Gr\u00fcnde. Erstens sind in vielen Organisationen Infrastrukturfragen unter der Kontrolle der DevOps-Abteilung, und die Entwicklungsteams k\u00fcmmern sich nicht besonders darum, wie die Pipeline funktioniert und wie alles, was damit verbunden ist, unterst\u00fctzt werden muss. Zweitens, um ehrlich zu sein, wird die Praxis \u201eInfrastruktur als Code (IaC)\u201c in vielen Unternehmen immer noch nicht angewendet. Aber es ist definitiv ein popul\u00e4rer Trend geworden, und es ist wichtig, sich in die damit verbundenen Prozesse, Ans\u00e4tze und Tools einzubringen. Oder zumindest auf dem Laufenden zu bleiben.<\/p>\n<p>Lassen Sie uns mit der Motivation beginnen, diesen Ansatz zu nutzen. Wir haben bereits besprochen, dass wir f\u00fcr das Starten von Tests in GitlabCI mindestens Ressourcen f\u00fcr das Starten des Gitlab Runner ben\u00f6tigen. Um Container mit Browsern\/Emulatoren zu starten, m\u00fcssen wir eine VM oder ein Cluster reservieren. Neben den Ressourcen f\u00fcr das Testen ben\u00f6tigen wir betr\u00e4chtliche Kapazit\u00e4ten zur Unterst\u00fctzung der Entwicklungs-, Staging- und Produktionsumgebungen, die auch Datenbanken, automatisierte Zeitpl\u00e4ne, Netzwerkkonfigurationen, Lastenausgleicher, Benutzerrechte und so weiter umfassen. Das Hauptproblem besteht im erforderlichen Aufwand zur Unterst\u00fctzung all dessen. Es gibt mehrere M\u00f6glichkeiten, wie wir \u00c4nderungen vornehmen und Updates bereitstellen k\u00f6nnen. Zum Beispiel k\u00f6nnen wir im Kontext von GCP die UI-Konsole im Browser verwenden und alle Aktionen durch Klicken auf Schaltfl\u00e4chen ausf\u00fchren. Eine alternative Methode k\u00f6nnte die Nutzung von API-Calls zur Interaktion mit Cloud-Entit\u00e4ten oder die Verwendung des gcloud-Befehlszeilenwerkzeugs sein, um die erforderlichen Manipulationen durchzuf\u00fchren. Doch bei einer wirklich gro\u00dfen Anzahl verschiedener Entit\u00e4ten und Infrastrukturkomponenten wird es schwierig oder sogar unm\u00f6glich, alle Operationen manuell auszuf\u00fchren. Dar\u00fcber hinaus sind all diese manuellen Aktionen nicht kontrollierbar. Wir k\u00f6nnen sie vor der Ausf\u00fchrung nicht zur \u00dcberpr\u00fcfung einreichen, kein Versionskontrollsystem verwenden und keine \u00c4nderungen schnell zur\u00fccksetzen, die zu einem Vorfall gef\u00fchrt haben. Um solche Probleme zu l\u00f6sen, haben Ingenieure automatische bash\/shell-Skripte erstellt und erstellen sie weiterhin, was nur geringf\u00fcgig 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 2 Werkzeuge, die zur Praxis von IaC geh\u00f6ren. Dies sind Terraform und Ansible. Einige glauben, dass es keinen Sinn macht, sie gleichzeitig zu verwenden, da ihre Funktionalit\u00e4t \u00e4hnlich ist und sie austauschbar sind. Aber die Tatsache ist, dass ihnen urspr\u00fcnglich ganz unterschiedliche Aufgaben gestellt werden. Und die Tatsache, dass diese Werkzeuge sich gegenseitig erg\u00e4nzen sollen, wurde bei einer gemeinsamen Pr\u00e4sentation von Entwicklern, die die Unternehmen HashiCorp und RedHat vertreten, best\u00e4tigt. Der konzeptionelle Unterschied besteht darin, dass Terraform ein Provisioning-Tool zur Verwaltung der Server selbst ist, w\u00e4hrend Ansible ein Tool zur Konfigurationsverwaltung ist, dessen Aufgabe die Installation, Konfiguration und Verwaltung der Software auf diesen Servern ist.<\/p>\n<p>Eine weitere wesentliche Unterscheidungsmerkmal dieser Werkzeuge ist der Programmierstil. Im Gegensatz zu Bash und Ansible verwendet Terraform einen deklarativen Stil, der auf der Beschreibung des gew\u00fcnschten Endzustands basiert, der erreicht werden soll. Zum Beispiel, wenn wir 10 VMs erstellen und die \u00c4nderungen mit Terraform anwenden, erhalten wir 10 VMs. Wenn das Skript erneut angewendet wird, passiert nichts, da wir bereits 10 VMs haben, und Terraform wei\u00df dies, da es den aktuellen Zustand der Infrastruktur in einer State-Datei speichert. Ansible hingegen verwendet einen prozeduralen Ansatz, und wenn wir ihn bitten, 10 VMs zu erstellen, erhalten wir beim ersten Durchlauf auch 10 VMs, \u00e4hnlich wie bei Terraform. Aber nach einem erneuten Durchlauf haben wir dann bereits 20 VMs. Das ist der wesentliche Unterschied. Im prozeduralen Stil speichern wir den aktuellen Zustand nicht und beschreiben einfach die Abfolge von Schritten, die ausgef\u00fchrt werden sollen. Nat\u00fcrlich k\u00f6nnen wir verschiedene Situationen behandeln, mehrere Pr\u00fcfungen auf die Existenz von Ressourcen und den aktuellen Zustand hinzuf\u00fcgen, aber es hat keinen Sinn, unsere Zeit damit zu verbringen und M\u00fche aufzuwenden, um diese Logik zu kontrollieren. Au\u00dferdem erh\u00f6ht das das Risiko, Fehler zu machen.\u00a0<\/p>\n<p>Zusammenfassend l\u00e4sst sich sagen, dass Terraform und die deklarative Notation das geeignetere Werkzeug f\u00fcr das Provisioning von Servern sind. Die Aufgaben zur Verwaltung von Konfigurationen sollten besser an Ansible delegiert werden. Nachdem wir das gekl\u00e4rt haben, schauen wir uns einige Anwendungsbeispiele im Kontext der Automatisierung an.<\/p>\n<h3>Wert f\u00fcr die Automatisierungsinfrastruktur<\/h3>\n<p>\n Hier ist es wichtig zu verstehen, dass die Infrastruktur zur Automatisierung von Tests als Teil der gesamten Infrastruktur des Unternehmens betrachtet werden muss. Das bedeutet, dass alle IaC-Praktiken global auf die Ressourcen der gesamten Organisation angewendet werden sollten. Wer daf\u00fcr verantwortlich ist, h\u00e4ngt von Ihren Prozessen ab. Das DevOps-Team hat mehr Erfahrung in diesen Fragen, sie sehen das gesamte Geschehen. QA-Ingenieure sind jedoch st\u00e4rker in den Prozess des Aufbaus von Automatisierung und der Pipeline-Struktur involviert, was ihnen erm\u00f6glicht, alle erforderlichen \u00c4nderungen und Verbesserungsm\u00f6glichkeiten besser zu erkennen. Die beste Option ist, gemeinsam zu arbeiten, Wissen und Ideen auszutauschen, um das gew\u00fcnschte Ergebnis zu erzielen.\u00a0<\/p>\n<p>Ich werde einige Beispiele f\u00fcr die Verwendung von Terraform und Ansible im Kontext der Automatisierung von Tests und der Werkzeuge, die wir zuvor besprochen haben, anf\u00fchren:<\/p>\n<p>1. Die notwendigen Eigenschaften und Parameter von VMs und Clustern \u00fcber Terraform beschreiben.<\/p>\n<p>2. Mit Ansible die erforderlichen Testwerkzeuge installieren: Docker, Selenoid, Selenium Grid und die ben\u00f6tigten Versionen von Browsern\/Emulatoren herunterladen.<\/p>\n<p>3. Die Eigenschaften der VM, auf der der GitLab Runner ausgef\u00fchrt werden soll, \u00fcber Terraform beschreiben.<\/p>\n<p>4. Mit Ansible den GitLab Runner und die erforderlichen Begleitwerkzeuge installieren, Einstellungen und Konfigurationen festlegen.<\/p>\n<h3>Illustration des aktuellen Standes der Infrastruktur<\/h3>\n<p>\n<img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/5d793a800a4ef62e181e6cb3a3f0544e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Links zum Lernen:<\/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 besser zusammen<\/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 Tools<\/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>Werkzeuge<\/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 Werkzeuge f\u00fcr Web und Mobile<\/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 mit dem Entwicklungscode<\/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>Parallele Ausf\u00fchrung von Tests<\/li>\n<li>Isolierte Umgebungen<\/li>\n<li>Einfache, flexible Aktualisierung von Versionen<\/li>\n<li>Dynamisches Stoppen ungenutzter Ressourcen<\/li>\n<li>Einfach einzurichten<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<ul>\n<li>Tests sind Teil der Pipeline<\/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 sie ben\u00f6tigt werden)<\/li>\n<li>Einfach zu verwalten und zu aktualisieren<\/li>\n<li>Sichtbarkeit und Kontrolle aller 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 von Pods:<\/p>\n<ul>\n<li>Skalierung \/ automatisches Skalieren<\/li>\n<li>Selbstheilung<\/li>\n<li>Aktualisierungen und Rollbacks ohne Unterbrechungen<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfrastruktur als Code (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>\u00c4hnliche Vorteile mit der Entwicklungsinfrastruktur<\/li>\n<li>Alle Vorteile der Code-Versionierung<\/li>\n<li>\u00c4nderungen sind einfach vorzunehmen und zu pflegen<\/li>\n<li>Vollst\u00e4ndig automatisiert<\/li>\n<\/ul>\n<p><\/p>\n<h2>Mindmap-Diagramme: Entwicklung der Infrastruktur<\/h2>\n<p>\nSchritt 1: Lokal<br \/>\n<img decoding=\"async\" alt=\"DevOps-Tools nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests 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 nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests 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 nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests 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 nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests 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 nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests 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 nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests 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 nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus einer Automatisierungsinfrastruktur f\u00fcr Tests von Grund auf.\" src=\"\/wp-content\/uploads\/2020\/04\/e784130f570260fc6c3aa263916e3db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Was folgt jetzt?<\/h2>\n<p>\nDas ist das Ende des Artikels. Aber zum Schluss m\u00f6chte ich einige Vereinbarungen mit Ihnen treffen.<\/p>\n<p><u>Von Ihrer Seite<\/u><br \/>\n Wie bereits zu Beginn erw\u00e4hnt, m\u00f6chte ich, dass der Artikel einen praktischen Nutzen bietet und Ihnen hilft, das Gelernte in der realen Arbeit anzuwenden. Ich f\u00fcge noch einmal<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>hinzu. Aber h\u00f6ren Sie selbst danach nicht auf, \u00fcben Sie weiter, studieren Sie die entsprechenden Links und B\u00fccher, erfahren Sie, wie es in Ihrem Unternehmen funktioniert, finden Sie Verbesserungsm\u00f6glichkeiten und beteiligen Sie sich daran. Viel Erfolg!<\/p>\n<p><u>Von meiner Seite<\/u><\/p>\n<p>ist aus dem Titel ersichtlich, dass dies nur der erste Teil war. Obwohl er ziemlich lang war, wurden hier noch wichtige Themen 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 ausf\u00fchren k\u00f6nnen, ist unser L\u00f6sungsangebot eingeschr\u00e4nkt. Zum Beispiel sind wir nicht in der Lage, Docker f\u00fcr die Ausf\u00fchrung des Simulators oder \u00f6ffentliche Clouds f\u00fcr virtuelle Maschinen zu nutzen. Aber das bedeutet nicht, dass es keine anderen Alternativen gibt. Ich werde mein Bestes tun, um Sie \u00fcber innovative L\u00f6sungen und moderne Tools auf dem Laufenden zu halten!<\/p>\n<p>Au\u00dferdem habe ich einige enorm wichtige Themen bez\u00fcglich Monitoring nicht erw\u00e4hnt. In Teil 3 werde ich die beliebtesten Tools f\u00fcr die \u00dcberwachung von Infrastruktur sowie die Daten und Metriken, die ber\u00fccksichtigt werden sollten, er\u00f6rtern.<\/p>\n<p>Und schlie\u00dflich. In Zukunft plane ich einen Videokurs zur Aufbau von Testinfrastrukturen und beliebten Tools zu ver\u00f6ffentlichen. Derzeit gibt es im Internet eine Vielzahl von Kursen und Vorlesungen zu DevOps, aber alle Materialien sind im Kontext der Entwicklung und nicht der Testautomatisierung dargestellt. In dieser Hinsicht ben\u00f6tige ich dringend Feedback, ob ein solcher Kurs f\u00fcr die Community 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 5.0.1.1 - 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\" \/>\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) 5.0.1.1\" \/>\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\" \/>\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 nicht nur f\u00fcr DevOps. Der Prozess des Aufbaus der Infrastruktur f\u00fcr die Testautomatisierung von Grund auf | ProHoster","description":"Teil 1: Web \/ Android Hinweis: Dieser Artikel ist eine \u00dcbersetzung des Originals ins Russische","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","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}