How-To-Tech-Stack: Aufbau eines Frameworks zur Testautomatisierung

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

09. November 2022

 

Bei der Entwicklung von Softwareapplikationen wird heute mehrheitlich auf agile Methoden mit immer kürzeren Build- und Releasezyklen gesetzt. Herkömmliche Testzyklen dauern oft mehrere Wochen, können so mit den steigenden Release-Frequenzen nicht schritthalten und bremsen die schnelle Software-Bereitstellung nicht unerheblich. Entwicklungs- und DevOps-Teams benötigen daher kontinuierliches Feedback während des gesamten Release-Zyklus, um die Qualität ihrer Arbeit sicherzustellen. Aus diesem Grund kommt immer häufiger eine Testautomatisierung zum Einsatz. Doch wie kann eine solche Automatisierung von Regressionstests gerade auf Integrations- und Systemtestebene aufgebaut werden? In diesem Beitrag möchten wir einmal kurz darstellen, wie eine maßgeschneiderte Lösung zusammengestellt werden kann und welche Aspekte zu berücksichtigen sind.

 

Testobjekt und Testkonzept

Als Testobjekt für unser Beispiel ziehen wir eine durchschnittliche, moderne Webapplikation heran, wie sie von vielen Unternehmen entwickelt wird. Sie besteht aus einer Frontend-Applikation, die für die Darstellung verantwortlich ist, meist auf Basis eines Typescript-Frameworks, wie bspw. React, Angular oder Nest, einem oder mehrerer Backendservices, die eine REST-Schnittstelle bereitstellen und zumeist auch einer Datenbank auf SQL-Basis.

Automatisiert werden sollen Integrationstests für einzelne Endpunkte der Backendschnittstellen, Systemtests für Vorgänge, an denen mehrere Services und die Datenbank beteiligt sind, sowie benutzernahe Ende-zu-Ende Tests, in denen die einzelnen Features der Webapplikation über das Frontend bedient werden und anschließend die von mehreren Akteuren verarbeiteten Resultate an anderer Stelle – bspw. in der Datenbank – überprüft werden.

 

Voraussetzungen zur Inbetriebnahme eines Frameworks zur Testautomatisierung

Zur Inbetriebnahme des Frameworks müssen verschiedene weitere Aspekte betrachtet werden. Das Entwicklungsumfeld, das Testmanagement und das Testdatenmanagement sollten genau aufeinander abgestimmt sein, bevor der Tech-Stack des Frameworks ausgewählt werden kann.

Zunächst wird das Entwicklungsumfeld der Webapplikation näher betrachtet. Wird hier agil gearbeitet? Sind Stakeholder aus verschiedenen Fachbereichen und mit unterschiedlichem, technischen Hintergrundwissen eingebunden? Dann empfiehlt sich hier die Wahl eines Behavior Driven Development-Ansatzes. Die Testszenarien werden hierbei mittels einer Beschreibungssprache aus der Sicht des Benutzers formuliert.

Auch ist die Wahl des richtigen Testmanagement-Werkzeuges relevant. Ein weit verbreitetes Tool für die agile Softwareentwicklung bietet hier Atlassians JIRA. Dieses lässt sich mit zusätzlichen Plug-Ins wie beispielsweise Xblends Xray oder SmartBears Zephyr Scale ausstatten und damit leicht zu einem vollwertigen Testmanagement-Tool erweitern. Die Plugins bieten hierbei eine tiefe Integration des Testmanagements in den agilen Prozess und eine Umgebung zur Formulierung von Testszenarien mittels der BDD-Beschreibungssprache Gherkin.

Die Wahl der verwendeten Programmiersprache für das Framework ist Geschmackssache. Zu den gängigsten Programmiersprachen gehören Python (ca. 30 % Marktanteil), Java (ca. 18 % Marktanteil) und C# & .NET (ca. 6 % Marktanteil). Für alle sind Frameworks verfügbar, die in Gherkin formulierte Testszenarien aus Testmanagementwerkzeugen auslesen und verarbeiten können: Für Python kommt Behave zum Einsatz, für Java empfiehlt sich Cucumber-JVM oder JBehave, für C# & .NET kommt SpecFlow zum Einsatz.

Für das Testdatenmanagement sollte ebenfalls ein Werkzeug herangezogen werden. Die einfachste Wahl für relationale Datenbanken sind einfache SQL-Skripte, die per Batch-Verarbeitung automatisiert den Datenbankzustand herstellen, der für die Ausführung der Testautomatisierung erforderlich ist. Fortgeschrittenere Lösungen bieten komfortable Features, wie bspw. eine Anonymisierungsfunktionalität von Produktivdaten.

 

Aufbau eines Frameworks und Automatisierung der Tests

Sind die Voraussetzungen geschaffen und wurde eine Sprache festgelegt, kann der eigentliche Aufbau des Frameworks beginnen. Hierbei bestimmt das Testobjekt unweigerlich die zu verwendenden Bibliotheken und Frameworks. Für jede Komponente wird eine Möglichkeit benötigt diese gezielt anzusprechen. Für das Frontend kann beispielsweise auf das Open-Source-Tool Selenium zurückgegriffen werden. Dieses lässt sich über gängige Paketmanager in Python, Java und C# einbinden. Für die REST-Schnittstellentests kann auf Bibliotheken, wie beispielsweise PyTest, REST-assured oder RESTSharp, zurückgegriffen werden. Für das Ansprechen der Datenbank gibt es ebenfalls Bibliotheken, wie bspw. SQLAlchemy, jdbi oder die Boardmittel von .NET.

Im Anschluss muss das Framework implementiert werden. Die Hauptaufgabe ist hier eine Applikation zu kodieren, die automatisiert die Testszenarien aus dem Testmanagementwerkzeug ausliest und diese im Anschluss Schritt für Schritt abarbeitet. Die einzelnen Sätze der Testfallbeschreibungen werden hierbei mit einzelnen Methoden des ausgeführten Codes verknüpft, sodass hinter jedem Satz eine Frontend-, REST-Schnittstellen- oder Datenbankinteraktion hinterlegt werden kann. Hierdurch werden automatisierte Integrations-, System- und auch Ende-zu-Ende-Tests möglich. In einem letzten Schritt ist es Aufgabe des Frameworks, die Resultate der durchgeführten Tests in das Testmanagementwerkzeug zurückzuspielen.

Nach der erfolgreichen Implementierung des Frameworks, wird dieses in eine CI/CD-Pipeline eines Build-Servers, wie bspw. Jenkins, Atlassians Bamboo oder GitLab-CI eingefügt. Zeit- oder Event-gesteuert wird dieses nun automatisch kompiliert und mit dem aktuellen Stand der Testszenarien ausgeführt.

 

Zum Schluss

Es gibt unzählige technische Lösungen und Tools auf dem Markt. Die Entscheidung für oder gegen eine bestimmte Bibliothek oder ein Framework ist individuell und letztendlich auch oft abhängig von den persönlichen Präferenzen. Fest steht, dass sich mit jeder der gängigen Programmiersprachen ein individuell angepasstes Framework zur Testautomatisierung realisieren lässt. Am Ende kommt es immer auf ein gutes Zusammenspiel der einzelnen Komponenten an und, dass die Mitarbeiter*innen gerne damit arbeiten.

 

Haben Sie Fragen zu dem Thema oder sind Sie an einer Unterstützung in diesem Bereich interessiert?
Wir von HiQ Projects sind Profis im Softwaretesting – egal ob manuell, automatisiert, mobile, agile, Last- und Performance, Testmanagement oder im Anforderungsmanagement – und unterstützen Sie dabei, Ihre Softwarequalität langfristig zu sichern und zu optimieren.

Kontaktieren Sie uns einfach. Wir freuen uns auf den unverbindlichen Austausch mit Ihnen.