Was ist Testautomatisierung? Eine einfache, klare Einführung
Es gibt zwei Arten von Tests in der Welt der Software – manuelle und automatisierte. Einige Arten des manuellen Testens, wie z. B. Discovery-Tests und Usability-Tests, sind von unschätzbarem Wert. Andere Arten von Tests, wie Regressionstests und Funktionstests, können manuell durchgeführt werden, aber es ist eine ziemlich verschwenderische Praxis für Menschen, immer wieder das Gleiche zu tun. Es sind diese Arten von sich wiederholenden Tests, die sich für die Testautomatisierung eignen.
Testautomatisierung ist die Praxis der automatischen Durchführung von Tests, der Verwaltung von Testdaten und der Nutzung der Ergebnisse zur Verbesserung der Softwarequalität. Es handelt sich dabei in erster Linie um eine Maßnahme zur Qualitätssicherung, die jedoch das Engagement des gesamten Softwareproduktionsteams erfordert. Von Geschäftsanalytikern bis hin zu Entwicklern und DevOps-Ingenieuren – um das Beste aus der Testautomatisierung herauszuholen, müssen alle einbezogen werden.
In diesem Beitrag erhalten Sie einen Überblick darüber, worum es bei der Testautomatisierung überhaupt geht. Es gibt alle Arten von Tests, aber nicht alle sollten automatisiert werden. Beginnen wir daher mit den allgemeinen Kriterien für die Testautomatisierung.
Kriterien für die Automatisierung
Ein Test muss einige Kriterien erfüllen, damit er automatisiert werden kann – andernfalls könnte er am Ende mehr kosten als er einspart. Schließlich besteht ein Hauptziel der Automatisierung darin, Zeit, Aufwand und Geld zu sparen. Im Folgenden finden Sie einige allgemeine Kriterien für die Testautomatisierung. Dabei handelt es sich um Ausgangspunkte, wohlgemerkt. Ihre Kriterien können sich je nach Ihren Gegebenheiten unterscheiden.
Wiederholbar
Der Test muss wiederholbar sein. Es macht keinen Sinn, einen Test zu automatisieren, der nur einmal ausgeführt werden kann. Ein wiederholbarer Test besteht aus den folgenden drei Schritten:
- Einrichten des Tests, einschließlich Daten und Umgebung.
- Ausführen der Funktion und Messen des Ergebnisses.
- Aufräumen der Daten und der Umgebung.
Im ersten Schritt müssen wir die Umgebung in einen konsistenten Zustand versetzen können. Mit anderen Worten, wenn wir einen Test für das Hinzufügen eines bestehenden Benutzers haben, müssen wir sicherstellen, dass der Benutzer existiert, bevor wir den Test durchführen. Sobald der Test abgeschlossen ist, sollte die Umgebung in den Grundzustand zurückversetzt werden.
Determinant
Wenn eine Funktion determinant ist, bedeutet dies, dass das Ergebnis jedes Mal dasselbe ist, wenn sie mit derselben Eingabe ausgeführt wird. Das Gleiche gilt für Tests, die automatisiert werden können. Nehmen wir zum Beispiel an, wir wollen eine Additionsfunktion testen. Wir wissen, dass 1 + 1 = 2 ist und dass 394,19 + 5,81 = 400,00. Die Addition ist eine Determinantenfunktion.
Eine Software hingegen kann eine so große Anzahl von variablen Eingaben verwenden, dass es schwierig ist, immer das gleiche Ergebnis zu erhalten. Einige Variablen können sogar zufällig sein, was es schwierig machen kann, das spezifische Ergebnis zu bestimmen. Das Software-Design kann dies kompensieren, indem es Testeingaben durch ein Test-Harness ermöglicht.
Andere Funktionen einer Anwendung können additiv sein; zum Beispiel würde das Anlegen eines neuen Benutzers die Anzahl der Benutzer erhöhen. Wenn wir einen Benutzer hinzufügen, wissen wir zumindest, dass die Anzahl der Benutzer nur um einen wachsen sollte. Die parallele Durchführung von Tests kann jedoch zu unerwarteten Ergebnissen führen. Isolierung kann diese Art von falschem positivem Ergebnis verhindern.
Meinungslos
Meinungsäußerungen lassen sich nicht automatisieren. Das ist der Punkt, an dem Usability-Tests, Beta-Tests und so weiter wirklich glänzen. Benutzer-Feedback ist wichtig, aber es kann nicht automatisiert werden … sorry!
Typen von automatisierten Tests
Es gibt so viele Arten von Tests, von denen viele automatisiert werden können, dass wir sie nicht alle in einen Beitrag packen können. Aber hier sind genug, um Ihnen einen guten Startpunkt zu geben.
Code-Analyse
Es gibt tatsächlich viele verschiedene Arten von Code-Analyse-Tools, einschließlich statischer und dynamischer Analyse. Einige dieser Tests suchen nach Sicherheitslücken, andere überprüfen Stil und Form. Diese Tests werden ausgeführt, wenn ein Entwickler Code eincheckt. Abgesehen von der Konfiguration der Regeln und der Aktualisierung der Tools ist mit diesen automatisierten Tests nicht viel zu tun.
Unit-Tests
Sie können auch eine Unit-Test-Suite automatisieren. Unit-Tests sind dazu gedacht, eine einzelne Funktion oder Einheit isoliert zu testen. Sie werden normalerweise auf einem Build-Server ausgeführt. Diese Tests sind nicht auf Datenbanken, externe APIs oder Dateispeicher angewiesen. Sie müssen schnell sein und sind so konzipiert, dass sie nur den Code und nicht die externen Abhängigkeiten testen.
Integrationstests
Integrationstests sind eine andere Art von Tier, wenn es um die Automatisierung geht. Da Integrationstests – manchmal auch End-to-End-Tests genannt – mit externen Abhängigkeiten interagieren müssen, sind sie komplizierter einzurichten. Oft ist es am besten, externe Ressourcen vorzutäuschen, vor allem, wenn es sich um Ressourcen handelt, die sich Ihrer Kontrolle entziehen.
Wenn Sie zum Beispiel eine Logistikanwendung haben, die von einem Webdienst eines Anbieters abhängt, kann Ihr Test unerwartet fehlschlagen, wenn der Dienst des Anbieters ausfällt. Bedeutet dies, dass Ihre Anwendung defekt ist? Möglicherweise, aber Sie sollten genügend Kontrolle über die gesamte Testumgebung haben, um jedes Szenario explizit zu erstellen. Verlassen Sie sich niemals auf einen externen Faktor, um das Ergebnis Ihres Testszenarios zu bestimmen.
Automatisierte Akzeptanztests
Es gibt heute mehrere Praktiken, die automatisierte Akzeptanztests (AAT) verwenden, aber im Grunde tun sie das Gleiche. Die verhaltensgesteuerte Entwicklung (BDD) und die automatisierte akzeptanztestgesteuerte Entwicklung (AATDD) sind ähnlich. Beide folgen der gleichen Praxis, den Akzeptanztest zu erstellen, bevor die Funktion entwickelt wird.
Am Ende wird der automatisierte Akzeptanztest ausgeführt, um festzustellen, ob die Funktion das liefert, was vereinbart worden ist. Daher ist es wichtig, dass die Entwickler, das Unternehmen und die Qualitätssicherung diese Tests gemeinsam schreiben. Sie dienen als Regressionstests für die Zukunft und stellen sicher, dass die Funktion die Erwartungen erfüllt.
Regressionstests
Ohne AATs müssen Sie Regressionstests im Nachhinein schreiben. Beides sind Formen von Funktionstests, aber wie sie geschrieben werden, wann sie geschrieben werden und von wem sie geschrieben werden, ist sehr unterschiedlich. Wie AATs können sie über eine API durch Code oder eine Benutzeroberfläche gesteuert werden. Es gibt Tools, mit denen diese Tests über eine grafische Benutzeroberfläche geschrieben werden können.
Leistungstests
Es gibt viele Arten von Leistungstests, aber sie alle testen einen bestimmten Aspekt der Leistung einer Anwendung. Hält es extremem Druck stand? Testen wir das System auf große Hitze? Geht es nur um die Reaktionszeit unter Last? Wie steht es mit der Skalierbarkeit?
Manchmal erfordern diese Tests die Emulation einer großen Anzahl von Benutzern. In diesem Fall ist es wichtig, eine Umgebung zu haben, die eine solche Leistung erbringen kann. Für diese Art von Tests stehen Cloud-Ressourcen zur Verfügung, aber es ist auch möglich, Ressourcen vor Ort zu nutzen.
Smoke-Tests
Was ist ein Smoke-Test? Es handelt sich um einen grundlegenden Test, der normalerweise nach einer Bereitstellung oder einem Wartungsfenster durchgeführt wird. Der Zweck eines Smoke-Tests besteht darin, sicherzustellen, dass alle Dienste und Abhängigkeiten funktionsfähig sind. Ein Smoke-Test ist nicht als umfassender Funktionstest gedacht. Er kann als Teil einer automatisierten Bereitstellung ausgeführt oder durch einen manuellen Schritt ausgelöst werden.
Allgemeiner Prozess der Testautomatisierung
Nachdem wir nun die Kriterien für die Automatisierung und genügend Arten von automatisierten Tests gesehen haben, um ein Gefühl für die Dinge zu bekommen, folgt nun der allgemeine Prozess der Testautomatisierung. Es gibt drei Hauptschritte bei der Testautomatisierung: Vorbereiten, Ausführen und Berichten der Ergebnisse.
Vorbereiten
Zuerst müssen wir den Zustand, die Testdaten und die Umgebung, in der die Tests stattfinden, vorbereiten. Wie wir gesehen haben, erfordern die meisten Tests, dass sich die Umgebung in einem bestimmten Zustand befindet, bevor eine Aktion ausgeführt wird. In einem typischen Szenario erfordert dies einige Vorbereitungen. Entweder müssen die Daten manipuliert werden oder die Anwendung muss in einen bestimmten Zustand versetzt werden oder beides!
Aktion ausführen
Wenn der Zustand und/oder die Umgebung den vordefinierten Zustand erreicht hat, ist es an der Zeit, die Aktion auszuführen! Der Testtreiber führt den Test aus, entweder durch den Aufruf der API oder der Benutzeroberfläche einer Anwendung oder durch die direkte Ausführung des Codes. Der Testtreiber ist für die Durchführung der Tests verantwortlich, aber das Testmanagementsystem übernimmt die Verantwortung für die Koordinierung aller Vorgänge, einschließlich der Berichterstattung über die Ergebnisse.
Ergebnisse melden
Ein Testautomatisierungssystem zeichnet die Ergebnisse auf und berichtet sie. Diese Ergebnisse können in verschiedenen Formaten vorliegen und sogar Problemtickets oder Bugs in einem Work Tracking System erzeugen. Das grundlegende Ergebnis ist jedoch „bestanden“ oder „nicht bestanden“. Normalerweise gibt es für jedes Testszenario einen grünen oder roten Indikator, der anzeigt, ob der Test bestanden wurde oder nicht.
Gelegentlich sind Tests nicht schlüssig oder laufen aus irgendeinem Grund nicht. In diesem Fall verfügt das Automatisierungssystem über ein vollständiges Protokoll der Ausgabe, das die Entwickler überprüfen können. Dieses Protokoll hilft ihnen, das Problem zu finden. Im Idealfall sind sie in der Lage, das Szenario erneut abzuspielen, sobald sie eine Lösung gefunden haben.
Das Fazit
Das Fazit ist: Testautomatisierung hilft, die Qualität mit Geschwindigkeit zu verbessern. Aber nicht alle Tests können automatisiert werden. Es ist definitiv eine Investition erforderlich. Bei so vielen Arten von Tests ist es wichtig, dass man die richtige Mischung findet. Die Testpyramide ist eine einfache Faustregel, die dabei hilft, dies zu erreichen. Sie besagt, dass die meisten Tests Unit-Tests sein sollten, gefolgt von Service-Tests und UI-Tests.
Ein Testautomatisierungssystem koordiniert die Testbelange, einschließlich der Verwaltung von Testdaten, der Durchführung von Tests und der Verfolgung der Ergebnisse. Testautomatisierung ist der nächste Schritt für Teams, die von der Last der Wiederholung derselben manuellen Tests, die automatisiert werden sollten, überfordert sind.
Autorenbiografie: Dieser Beitrag wurde von Phil Vuollet verfasst. Phil verwendet Software zur Automatisierung von Prozessen, um die Effizienz und Wiederholbarkeit zu verbessern. Er schreibt über technologie- und unternehmensrelevante Themen, hält gelegentlich Vorträge zu denselben Themen und ist ein Familienmensch, der mit seinen Kindern gerne Fußball und Brettspiele spielt.