Continuous Testing in DevOps

12. Februar 2021 | Consulting

Lesezeit ca. 8 Minuten

Ein short-dive-in unseres Senior-QA-Consultants Jamal Oubaouih

Aufgrund immer rasanterer Entstehung neuer Systeme und immer kürzerer Zyklen bei der Entstehung von Softwareprogrammen funktionieren die „Never touch a running System“ und „der Tester als Feuerwehrmann“ Prinzipien nicht mehr. Automatisierung und ständige Optimierung aller Prozesse vom Design bis zur Produktion sind unabdingbare Grundvoraussetzungen für den Erfolg bei agilen Vorhaben. Damit führt der Weg automatisch zu dem Prinzip DevOps und der integrierten Betrachtung von Entwicklung, Test und Betrieb. Das Projektziel und -ergebnis wird zum gemeinschaftlichen Vorgehen und zur gemeinschaftlichen Verantwortung. Durch die Zusammenarbeit in gemeinsamen Prozessen und Werkzeugen entsteht eine deutlich bessere Kommunikation und Kooperation miteinander und letztlich eben ein besseres gemeinsames Ergebnis.

Das Ziel bei DevOps ist die möglichst schnelle Umsetzung stabiler und hochwertiger Software; daneben entsteht zusätzlich auch ein besseres Miteinander der Teams und deren Mitarbeiter.

Eine DevOps-Plattform ist im Grunde nichts anderes als ein zentralisiertes, webbasiertes Automatisierungswerkzeug für eine beliebige Anzahl von Funktionen. Ein DevOps-Zyklus umfasst dabei-die Bereiche Continuous Integration CI, Continuous Delivery CD und Continuous testing CT.

Diese Komponenten bilden die sogenannte CI/CD-Pipeline, bei der es sich um einen aufeinander aufbauenden und in sich geschlossenen Feedback-Prozess handelt. Mithilfe einer CI/CD-Pipeline können Änderungen an der Software unmittelbar vorgenommen und wieder live in Produktion gebracht werden. Durch die Pipeline existiert eine Transparenz aller laufenden Prozessschritte für alle Team- und Projektmitglieder und Stakeholder und ermöglichen somit ein zeitnahes Feedback.

Die CI/CD-Pipeline bildet den Backbone moderner DevOps-Umgebungen.

Nun betrachten wir uns das Continuous Testing ein wenig genauer. Im Prinzip stellt es eine Art „Pattern“ für kontinuierliche Testläufe mit kurzen Feedbackschleifen dar. Wir werden das Vorgehen anhand eines Beispiels genauer erläutern und dabei auf folgende Punkte eingehen:

    • Wie kann man den Test in einer CI/CD-Pipeline integrieren?
    • Welche Tests und Werkzeuge sind von Vorteil?
    • Welche besonderen Skills werden von Testern erwartet?
    • Welche Chancen ergeben sich daraus für das Continuous Testing?

Continuous Testing

Ohne Testen können wir keine Qualität sicherstellen. Agile Projekte erfordern dabei einen speziellen Testprozess. In DevOps ist die Rolle eines Testers und des Testens anders als in anderen Softwareentwicklungsansätzen. Das Testen wird in jede Phase einer CI/CD-Pipeline integriert. Daraus ergeben sich folgende Konsequenzen:

    • Entwicklertests werden gestärkt
    • Veränderte Toollandschaft
    • Höherer Automatisierungsgrad
    • Prozesse werden schlanker

Zwei wichtige Aspekte spielen dabei eine große Rolle für den Testprozess. Die Testautomatisierung und das „shift left“ Testing. Der Grundsatz des „shift left“ konzentriert sich darauf, die bestmögliche Qualität der Software bereits von Anfang an sicherzustellen. Je später ein Fehler erkannt wird, desto teurer wird seine Beseitigung. Die Testautomatisierung spielt beim „shift-left“-Testansatz eine große Rolle. Durch die Testautomatisierung können Unit Test, Integration Test und System Test früh wiederverwendet werden und beschleunigen somit den Testprozess.

Continus Testing als automatisierter Prozess, überprüft kontinuierlich die Software auf Veränderungen des Codes und erfordert deshalb einen tiefgreifenden Wandel über Arbeitsweisen, Prozesse und Technologien hinweg und setzt voraus:

    • Umsetzbares Feedback wird zum richtigen Zeitpunkt an den richtigen Beteiligten gesendet
    • Das Testen erfolgt in allen Phasen des Softwareprozesses

DevOps erfordert einen starken Teamgeist und enge Zusammenarbeit aller Projektbeteiligten und das Agieren nach dem Motto „all in one“. Die Anforderungen an jede Rolle erhöhen sich methodisch, technisch und in den Soft Skills. Alle Rollen, vom Tester über den Testmanager bis zum Entwickler sorgen dafür, dass die CI/CD-Pipeline funktioniert und agieren gemeinsam als solides Team.

Um Continous Testing erfolgreich in DevOps umzusetzen, sollte das Testteam folgende Punkte beachten und im Projekt einplanen:

    • Ein Testframework einzurichten, das die Wiederverwendung und datengesteuertes Testen unterstützt
    • Einzelne Tests und das gesamte Testframework müssen mit der sich ständig weiterentwickelnden Anwendung synchronisiert werden
    • Planung eines automatisierten Smoke Test für die End-to-End Tests
    • Frontend, Backend und die Services sind separat über eigene Deployment-Pipelines bereitzustellen
    • Die Verteilung der Testautomatisierung von UI-Tests und Services sollte besonders aufeinander abgestimmt sein. Best Practice bisher erscheint dabei für die Testautomatisierung von UnitTest ca 70%, Web Services ca 20% und für die GUI ca 10 % Aufwand zu veranschlagen
    • Aufbau eines Workflows von der Versionsverwaltung bis zum Integrationssystem
    • Einsatz eines Testautomatisierungstools, welches die Integration der CI/CD-Pipeline in dessen Landschaft unterstützt

Continuous Testing:
Praxisbeispiele mit Selenium, Maven und Jenkins

In DevOps wird die Software in Services / Microservices aufgeteilt. Jeder Service besitzt hierbei seine eigene CI/CD-Pipeline. In jedem einzelnen Service wird definiert welche Tests integriert werden und somit auch bei jedem Durchlauf zur Ausführung kommen.

In Jenkins CI / CD wird eine Pipeline als eine Reihe von Tasks definiert, die in einer bestimmten Reihenfolge miteinander verbunden sind.

Konfiguration

    • Der Entwickler lädt sein Code in das Repository (z.B. GitHub).
    • Ein Testframework mit Selenium als Maven-Projekt und TestNG unter einer Entwicklungsumgebung (Eclipse, intellij, Visual Studio) erstellen.
Selenium  Java source code mit TestNG
TestNG Testkonfiguration
    • Der Tester lädt ebenso das Projekt in GitHub, indem die Testsuite und die Konfigurationsdatei Pom.xml vorhanden sind
    • Ein Maven Projekt wird in Jenkins erstellt. Für die Kommunikation mit GitHub muss in Jenkins geprüft werden, ob ein GitHub Plugin vorhanden ist
    • Es wird pro Repository in GitHub ein Build trigger für Jenkins (Entwicklung, Test) eingerichtet
    • Unter „Source Code Management“ werden die Git-Repository Links kopiert
    • Unter Build Triggers das „Poll Scm“ auswählen. Es wird bei jedem commit in Git ein Jenkins-Build ausgelöst
    • Maven Goals „clean“ und „Install“ eingeben dann den Pfad mit der Konfigurationsdatei pom.xml eingeben und speichern
    • Build starten. Jenkins lädt die abhängigen Bibliotheken und Pakete herunter und beginnt mit dem Build
    • Die Builds können unter „zu überwachende Projekte“ so konfiguriert werden, dass sie automatisch hintereinander laufen
    • Ein Pipeline Plugin verbessert das Management der Builds. Die Reihenfolge, Scheduling und Status der Builds können hier konfiguriert werden
    • Mit dem Plugin TestNG können die Reports erstellt werden, die mit org.testng.reporters. XMLReporter erzeugt wurden
    • Alternativ kann das HTML Publisher-Plugin für die Berichterstellung verwendet werden.

Continuous Testing bringt unmittelbaren Nutzen

    • Transparenz: Automatisierungstests werden kontinuierlich durchgeführt und Entwickler dadurch direkt über die Ergebnisse der Builds informiert
    • Effektivität: Das kontinuierliche Testen ermöglicht es, Fehler frühzeitig zu erkennen und zu beheben
    • Geschwindigkeit: Die Softwareentwicklung geht schneller voran. Fertige Features können direkt veröffentlicht werden
    • Sicherheit: Regressionstestfälle können in Jenkins scheduled werden und vor jedem Release-Zyklus automatisch gestartet werden
    • Integration: „Maven-Projekt“ in Selenium vereinfacht die Konfigurationseinstellungen und die Integration zum Jenkins-Server

DevOps und Continuous Testing für Ihre Projekte:

Wir unterstützen die Realisierung und Einrichtung der CI/ CD-Pipeline in Projekten. Dabei ermitteln wir anhand der Anforderungen die notwendigen Tests, von der Testfallermittlung bis zur Testautomatisierung:

    • Aufbau und Implementierung des Continuous testing
    • Konzeption und Realisierung der Testinfrastruktur für Software
    • Definition, Aufbau, und Anpassung des Regressionstest-Portfolios
    • Konfiguration und Integration der Tests in Buildprozesse mit Jenkins, GitHub und Maven

Durch die Anwendung des Continuous Testing ermöglichen Sie qualitativ hochwertige Bereitstellung der Software in kürzeren Zyklen. Nach dem erforderlichen Initialaufwand sinken die Verfahrenskosten merklich durch den Prozess der Continuous Integration. Schnellere Erkenntnis über die Qualität, effektivere Risikosteuerung durch die CI/CD-Pipeline und frühere Vermeidung von Fehlern und Abweichungen sind ein zusätzlicher Nutzen, der durch die Anwendung von Continuous Testing erreicht werden kann.

Ein wenig nach dem Motto:

„Wenn wir schneller werden, sind wir schneller gut!“

Jamal Oubaouih

Ihr Ansprechpartner:

Jamal Oubaouih – Senior QA Consultant – jamal.oubaouih@lucke-edv.de

Lucke EDV GmbH | Zurück