Was ist ein Testgeschirr? (Beispiele)

โšก Intelligente Zusammenfassung

Test Harness in Software Testing vereint Stubs, Treiber, Testdaten und Ausfรผhrungswerkzeuge, sodass Teams Module validieren kรถnnen, bevor jede Abhรคngigkeit existiert. Dadurch werden blockierte Testzyklen in wiederholbare, automatisierte Verifizierung umgewandelt, die Ergebnisse ohne manuellen Aufwand liefert.

  • ๐Ÿงฉ Definition: Ein Harness bรผndelt Testfรคlle, Stubs, Treiber, Details zum Zielbereitstellungsport und die zu testende Quelldatei zu einer ausfรผhrbaren Einheit.
  • ๐ŸŽฏ Warum es darauf ankommt: Die Tests beginnen, bevor Datenbanken, Gateways oder Backend-Module existieren, damit Fehler frรผhzeitig auftauchen, wenn die Reparaturkosten am niedrigsten sind.
  • ๐Ÿ”ง Kernteile: Die Ausfรผhrungs-Engine, das Skript-Repository, der Testdatenspeicher, die Stubs, die Treiber, der Ausgabevalidator und die Berichtsschicht haben jeweils eine eigene Verantwortung.
  • ๐Ÿ” Workflow: Skripte laden, die zu testende Anwendung aufrufen, fehlende Module ersetzen, Ausgabe erfassen, mit den Erwartungen vergleichen, einen Bericht verรถffentlichen.
  • ๐Ÿ›  Werkzeug: JUnit fits JavaNUnit passt zu .NET, wรคhrend Selenium, TestNG, PyTest und JMeter Erweiterung der Kabelbaumabdeckung auf Web-, Parallel- und Lastarbeiten.
  • ๐Ÿ“ˆ Optimierung: Halten Sie die Stubs an das tatsรคchliche Modulverhalten angepasst, speichern Sie Testdaten auรŸerhalb der Skripte und fรผhren Sie das Test-Harness bei jedem Continuous-Integration-Build aus.

Testgeschirr im Softwaretest

Testgeschirr im Softwaretest ist eine Sammlung von Stubs, Treibern und anderen unterstรผtzenden Tools, die zur Automatisierung der Testausfรผhrung erforderlich sind. Das Test-Harness fรผhrt Tests mithilfe einer Testbibliothek aus und generiert Testberichte. Der Test-Harness enthรคlt alle Informationen, die zum Kompilieren und Ausfรผhren eines Tests erforderlich sind, z. B. Testfรคlle, Zielbereitstellungsport (TDP), zu testende Quelldatei, Stubs usw.

Vereinfacht gesagt, umschlieรŸt ein Testsystem die zu prรผfende Komponente in einer kontrollierten Umgebung. Fehlende benachbarte Module werden durch kleine Dummy-Programme ersetzt, die Eingaben stammen aus einem festen Datensatz, und jedes Ergebnis wird in ein Protokoll geschrieben, anstatt auf dem Bildschirm angezeigt zu werden. In den folgenden Abschnitten wird erlรคutert, warum Teams ein solches Testsystem entwickeln, woraus es besteht, wie es funktioniert und wo es eingesetzt wird.

Warum Testgeschirr verwenden?

Ein Testsystem dient dazu, Wartezeiten im Testzyklus zu eliminieren. Da es alles simuliert, was noch nicht bereit ist, โ€ฆ Softwaretest Das Team kann bereits im ersten Sprint mit der รœberprรผfung des Verhaltens beginnen, anstatt erst nach der finalen Integration. Das folgende Diagramm zeigt, wo ein Testframework zwischen den Testskripten und der zu testenden Anwendung positioniert ist.

Test Harness

  • Automatisieren Sie den Testprozess
  • Fรผhren Sie Testreihen von Testfรคllen aus
  • Generieren Sie zugehรถrige Testberichte
  • Unterstรผtzung fรผr das Debuggen
  • Um die Testergebnisse fรผr jeden einzelnen Test aufzuzeichnen
  • Hilft den Entwicklern, die Codeabdeckung auf Codeebene zu messen
  • Steigern Sie die Produktivitรคt der Anlage durch Automatisierung
  • Verbessern Sie die Qualitรคt von Softwarekomponenten und Anwendungen
  • Um die komplexen Bedingungen zu bewรคltigen, die fรผr Tester nur schwer zu simulieren sind

Diese Vorteile sind besonders bei kurzen Releasezyklen relevant. Wenn Code mehrmals pro Woche ausgeliefert wird, verursacht ein Fehler, der bis zur Integrationsphase erhalten bleibt, weitaus hรถhere Kosten. tracEs ist besser, als wenn man am Tag seiner Entstehung an einem Stumpf hรคngen bleibt. Dieser Erfolg stellt sich jedoch erst ein, wenn das Geschirr aus den richtigen Teilen zusammengesetzt ist.

Wichtige Komponenten eines Testaufbaus

Ein Testsystem ist kein einzelnes Programm, sondern eine Zusammenstellung von Teilen, von denen jedes ein Hindernis beseitigt, das ansonsten einen unbeaufsichtigten Testlauf verhindern wรผrde.

  • Testskripte: Automatisierte Anweisungen, die die auszufรผhrenden Schritte und das zu erwartende Ergebnis beschreiben, verfasst gemรครŸ dem Testskript Konventionen.
  • Testausfรผhrungs-Engine: Der Runner, der Skripte der Reihe nach liest, Abhรคngigkeiten auflรถst und die sequentielle oder parallele Ausfรผhrung auslรถst.
  • Testdaten-Repository: Eingabewerte, die auรŸerhalb des Skripts in CSV-, JSON-, XML- oder einer vordefinierten Datenbank gespeichert sind und hรคufig von folgenden Quellen befรผllt werden: Testen Sie Tools zur Datengenerierung.
  • Treiber: Dummy-Aufrufmodule, die die zu testende Komponente aufrufen, wenn die eigentliche darรผberliegende Schicht, wie beispielsweise eine Benutzeroberflรคche, noch nicht fertiggestellt ist.
  • Stummel: Dummy-Module, die vordefinierte Antworten zurรผckgeben, beispielsweise ein Zahlungsdienst, der โ€žZahlung erfolgreichโ€œ zurรผckgibt, ohne eine Bank zu kontaktieren.
  • Ausgabevalidierung: Assertionslogik, die die tatsรคchliche Ausgabe mit dem erwarteten Wert vergleicht und jeden Fall als bestanden oder nicht bestanden kennzeichnet.
  • Protokollierungs- und Berichtsschicht: Zeitstempel, Screenshots, Konsolenausgabe und eine Zusammenfassung des Laufs, die jeden Fehler sichtbar machen tracanschlieรŸend essbar.

Entfernt man ein einziges Teil, verliert der Kabelbaum seine automatische Funktion, da dann bei jeder Fahrt etwas von Hand nachgerรผstet werden muss.

Wie funktioniert ein Testkabelbaum?

Ein Harness wiederholt bei jeder Ausfรผhrung dieselbe Schleife. Die Kenntnis dieser Schleife verrรคt Ihnen genau, wo Ihr eigenes Harness ansetzen muss. Automatisierungstests Assets werden eingebunden, und welcher Schritt schlรคgt fehl, wenn ein Durchlauf rot wird.

  1. Bereiten Sie die Umgebung vor: Das Kabelbรผndel lรถst die Umgebungskonfiguration auf, รถffnet Verbindungen und lรคdt die Gerรคte, sodass jeder Durchlauf vom gleichen bekannten Zustand aus startet.
  2. Laden Sie die Testskripte: Skripte, Parameter und erwartete Ergebnisse werden aus dem Repository gelesen. Zur Laufzeit muss nichts eingegeben werden, wodurch ein zweiter Durchlauf mit dem ersten vergleichbar ist.
  3. Ersetzen Sie die fehlenden Module: Fahrer stehen stellvertretend fรผr Anrufer, die noch nicht existieren, und Stubs stehen stellvertretend fรผr Dienste, die noch nicht fertiggestellt, instabil oder zu teuer sind.
  4. Die zu testende Anwendung aufrufen: Die Ausfรผhrungs-Engine lรถst den im Skript beschriebenen Workflow aus, sei es ein Methodenaufruf oder ein API Anfrage oder Browserinteraktion.
  5. Erfassen Sie die tatsรคchliche Ausgabe: Rรผckgabewerte, Antwortnutzdaten, Datenbankzeilen, Protokollzeilen und der Bildschirmstatus werden alle wรคhrend ihrer Entstehung protokolliert.
  6. Vergleich mit den erwarteten Ergebnissen: Der Ausgabevalidator prรผft jeden erfassten Wert. Jede Abweichung kennzeichnet den Fall als fehlgeschlagen und protokolliert sowohl den erwarteten als auch den beobachteten Wert.
  7. Protokollieren und berichten: Das Geschirr schreibt einen Zeitstempel trace des Laufs und generiert einen Bericht รผber Erfolg/Misserfolg, den ein Entwickler lesen kann, ohne irgendetwas erneut ausfรผhren zu mรผssen.
  8. AbreiรŸen: Temporรคre Daten, Verbindungen und Stub-Zustรคnde werden gelรถscht, damit der nรคchste Fall keine Reste von diesem รผbernehmen kann.

๐Ÿ’ก Tipp: Aktualisieren Sie Ihre Stubs, sobald sich das eigentliche Modul รคndert. Ein Stub, der noch das Format des letzten Quartals verwendet, meldet einen erfolgreichen Durchlauf, obwohl die Live-Integration bereits unterbrochen ist.

Ein praktisches Beispiel verdeutlicht den Ablauf. Angenommen, die Checkout-Seite ist bereit, das Zahlungsgateway jedoch nicht. Ein Treiber sendet die Anfrage, die normalerweise die Schnittstelle senden wรผrde. Ein Stub antwortet zunรคchst mit โ€žZahlung erfolgreichโ€œ und dann mit einem Timeout. Der Validator bestรคtigt im einen Fall die Bestellung und fordert im anderen Fall zur Wiederholung auf. Beide Ablรคufe werden geprรผft, bevor das Gateway-Team auch nur eine Zeile Code schreibt.

Es gibt zwei Kontexte, in denen Test Harness verwendet wird

Derselbe Mechanismus dient zwei unterschiedlichen Zwecken, und die Terminologie รคndert sich leicht, je nachdem, in welchem โ€‹โ€‹Bereich man sich befindet.

  1. Automatisierungstests: Es enthรคlt die Testskripte, Parameter, die zum Ausfรผhren dieser Skripte und zum Sammeln von Ergebnissen zur Analyse erforderlich sind
  2. Integrationstests: Es wird verwendet, um zwei Code- oder Moduleinheiten zusammenzustellen, die miteinander interagieren, um zu รผberprรผfen, ob das kombinierte Verhalten wie erwartet ist oder nicht

Betrachten wir ein Anmeldemodul und ein Profilmodul, die ein Benutzertoken austauschen mรผssen. Im Integrationskontext simuliert ein Treiber eine erfolgreiche Anmeldung und รผbergibt das Token an die Profillogik, sodass die DatenzuordnungpingDie Berechtigungsprรผfung und die Bildschirmdarstellung kรถnnen alle รผberprรผft werden, bevor der eigentliche Authentifizierungsdienst abgeschlossen ist. Im Automatisierungskontext wird dasselbe Fallpaar einer Testsuite hinzugefรผgt und bei jedem Build erneut ausgefรผhrt, ohne dass dies von jemandem manuell erledigt wird.

Arten von Testkabelbรคumen

Da Software in Schichten aufgebaut ist, ist ein Testsystem in der Regel auf die Schicht spezialisiert, die es รผberprรผft. Vier Typen decken nahezu jedes Projekt ab.

A Unit-Test-Rahmen Es testet die kleinsten Codeabschnitte, wie z. B. einzelne Funktionen oder Methoden, wobei jede Abhรคngigkeit durch einen Stub ersetzt wird. Es ist am schnellsten auszufรผhren und am gรผnstigsten zu warten, weshalb Unit-Test Testsuiten sind รผblicherweise die erste Infrastruktur, die ein Team erstellt. Ein typischer Anwendungsfall ist das Testen einer Steuerberechnung, ohne das Abrechnungsmodul zu verรคndern.

An Integrationstestrahmen Sie prรผft, ob zwei oder mehr Module korrekt zusammenarbeiten, und ist die Schicht, in der Datenabweichungen und fehlgeschlagene Aufrufe sichtbar werden. Es handelt sich um das im Abschnitt beschriebene Framework. Integrationstests Im obigen Kontext geht es beispielsweise darum zu รผberprรผfen, ob ein Bestellservice die richtige Nutzlast an einen Zahlungsservice รผbergibt.

A Systemtestvorrichtung steuert einen vollstรคndigen End-to-End-Workflow รผber Schnittstelle, Dienst und Datenbank hinweg, so Systemtests kann bestรคtigen, dass die Geschรคftsregeln gelten, sobald alle Ebenen vorhanden sind. Regressionstest-Rahmen AnschlieรŸend wird die gesamte Testsuite nach jeder ร„nderung erneut ausgefรผhrt, was den Effekt auslรถst. Regressionstests Praktisch dann, wenn bei jedem Merge mehrere hundert Szenarien wiederholt werden mรผssen.

Testkabelbaumwerkzeuge

Jeder dieser Typen basiert in der Regel auf einem bestehenden Werkzeug und wird nicht von Grund auf neu entwickelt. Die beiden klassischen Optionen bleiben die Unit-Level-Frameworks:

Neben diesen beiden ergรคnzen die meisten Teams die Funktionalitรคt durch Tools, die das Framework auf den Browser, die API-Schicht oder das Lastprofil ausweiten. Die folgende Tabelle ordnet die gรคngigen Optionen ihrer jeweiligen Funktion zu.

Werkzeug am besten geeignet fรผr Rolle innerhalb des Geschirrs
JUnit Java Unit- und Integrationssuiten Lieferanten, Einrichtungsgegenstรคnde und Zusicherungen
NUnit C#- und VB.NET-Code auf der .NET-Plattform Gleiche Rolle wie JUnit fรผr .NET-Sprachen
Selenium Browserbasierte End-to-End-Ablรคufe Fungiert als Treiber fรผr die Benutzerschnittstellenschicht
TestNG Large Java Suiten, die Gruppen benรถtigenping und parallele Lรคufe Dient als Testausfรผhrungs-Engine
PyTest Python Dienste und API-Level-Prรผfungen Die Anschlรผsse dienen gleichzeitig als Stubs und Datenanbieter.
Apache JMeter Last-, Belastungs- und Leistungsszenarien Erzeugt synthetischen Datenverkehr fรผr die zu testende Anwendung.
Postman REST API-Verbindungtract-Verifizierung Bietet simulierte Server, die als Ersatz fรผr unfertige Endpunkte dienen.

Egal fรผr welche Kombination Sie sich entscheiden, der Kabelbaum amortisiert sich erst, wenn er unbeaufsichtigt lรคuft. SchlieรŸen Sie ihn daher an einen kontinuierliche integration Erledigen Sie den Job frรผhzeitig. Eine grรถรŸere Auswahl an Optionen finden Sie in der Guru99 Testwerkzeuge Zusammenfassung. Eine Unterscheidung sorgt noch immer fรผr Verwirrung, und es lohnt sich, diese zu klรคren, bevor Sie eine Entscheidung treffen.

Test-Harness vs. Test-Framework

Ein Testharness und ein Automatisierungsframework werden oft als dasselbe betrachtet, obwohl sie unterschiedliche Fragen beantworten: Der Testharness fรผhrt einen Test aus, wรคhrend das Framework die Struktur darstellt, innerhalb derer Tests entworfen werden. Die folgende Tabelle stellt sie einander gegenรผber.

Test Harness Testautomatisierungs-Framework
Ein Test-Harness besteht aus Treibern und Stubs, kleinen Dummy-Programmen, die mit der zu testenden Software interagieren Es handelt sich um eine Reihe von Prozessen, Verfahren, Abs.tracDas Konzept und eine Umgebung, in der automatisierte Tests entworfen und implementiert werden
Sie kรถnnen in Test Harness kein Skript โ€žAufzeichnen und Wiedergebenโ€œ verwenden Ein Tester kann in diesem Framework manuell ein Skript zur โ€žAufzeichnung und Wiedergabeโ€œ erstellen
Der Test-Harness enthรคlt alle Informationen, die zum Kompilieren und Ausfรผhren eines Tests erforderlich sind, z. B. Testfรคlle, Zielbereitstellungsport (TDP), zu testende Quelldatei, Stubs usw. Das Testautomatisierungs-Framework enthรคlt Informationen wie Testbibliothek, Testtools, automatisierte Testpraktiken, eine Testplattform usw.
Ein Testgeschirr wird kategorisiert in
Automatisierungstests
Integrationstests
Automatisierungs-Framework Beispiele
Datengesteuertes Testen
Schlรผsselwortgesteuertes Testen
Modularitรคtsgesteuertes Testen
Hybridtests
Modellbasiertes Testen
Code getriebenes Testen
Verhaltensgesteuertes Testen

Hรคufig gestellte Fragen

Ein Testsystem umfasst die Hardware-, Betriebssystem-, Netzwerk- und Datenbankkonfiguration, auf der Tests ausgefรผhrt werden. Ein Testrahmen ist die darรผber liegende Softwareschicht, die Testumgebungen, Treiber, Daten und Berichtsfunktionen bereitstellt. Das eine ist der Ort, das andere der Mechanismus.

Aufnahme- und Wiedergabefunktion ist nicht verfรผgbar, daher sind Skriptkenntnisse erforderlich. Java, Python.NET ist erforderlich. Die Ersteinrichtung erfordert erheblichen Aufwand, Stubs entfernen sich bei Vernachlรคssigung von den eigentlichen Modulen, und umfangreiches Mocking kann Integrationsfehler bis spรคt in die Zukunft verbergen.

Die Pipeline ruft das Harness nach jedem Commit auf. Jenkins, GitHub Actions oder GitLab CI lรถsen den Lauf aus, das Harness fรผhrt Skripte gegen Stubs aus, und der Build schlรคgt automatisch fehl, wenn eine Assertion nicht erfรผllt ist.

KI-Modelle lesen Schnittstellenรคnderungen und reparieren fehlerhafte Locators oder Assertions automatisch, sodass ein Framework auch nach Refactorings erhalten bleibt. Die Selbstheilung kennzeichnet zudem instabile Fรคlle und reduziert so den manuellen Wartungsaufwand, der รผblicherweise bei jedem Build anfรคllt. Selenium Suiten.

Ja. Generative Modelle erzeugen Stub-Antworten aus einer API-Spezifikation, entwerfen Treibercode aus Modulsignaturen und synthetisieren realistische Datensรคtze. Revรœberprรผfen Sie die Ausgabe vor der Verwendung, denn ein plausibel aussehender Stub kann dem eigentlichen Ergebnis immer noch widersprechen.tract.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: