Hinzufügen von Leben zur Service-Virtualisierung: Stateful- und State Transition-Tests
Von Chris Colosimo
6. Juni 2019
6 min lesen
Das Erstellen einer stabilen virtuellen Darstellung, um ein zustandsbehaftetes Verhalten Ihrer Entwicklungsworkloads zu erreichen, kann schwierig sein. So kann Ihnen Parasoft Virtualize dabei helfen, Ihre virtuellen Dienste zu simulieren und zu testen.
Zum Abschnitt springen
Bei der Dienstvirtualisierung besteht ein entscheidender Teil der Erstellung realistischer virtueller Dienste darin, sicherzustellen, dass der Dienst ein zustandsbehaftetes Verhalten aufweist, sodass er seinen Zustand von Testlauf zu Testlauf beibehalten kann. Aber was ist die Grenze? Wann wird Simulation zu viel Simulation? Lassen Sie uns in Zustandsübergangstests eintauchen und erfahren, wann Sie sie brauchen.
Um Funktionstests zu beschleunigen, ist ein uneingeschränkter Zugriff auf eine vertrauenswürdige und realistische Testumgebung unerlässlich. Eine vollständige Testumgebung umfasst die zu testende Anwendung (AUT) und alle ihre abhängigen Komponenten (z. B. APIs, Dienste von Drittanbietern, Datenbanken, Anwendungen und andere Endpunkte).
Service-Virtualisierung ermöglicht es Teams (1) Zugang erhalten zu dieser vollständigen Testumgebung, die sie benötigen, einschließlich aller kritischen abhängigen Systemkomponenten, und (2) das Verhalten ändern dieser abhängigen Komponenten auf eine Weise, die mit einer abgestuften Testumgebung unmöglich wäre. So können Teams früher, schneller und vollständiger testen.
Zustandsbehaftetes Verhalten
Ein kritischer Teil der Erstellung realistischer virtualisierter Abhängigkeiten ist ein zustandsbehaftetes Verhalten. Mit anderen Worten, eine virtualisierte Abhängigkeit, die ihren Status von Testlauf zu Testlauf beibehalten kann. Betrachten Sie ein Beispiel für die Simulation einer virtualisierten Warenkorbkomponente. Eine einfache API ermöglicht das Suchen, Hinzufügen, Abrufen und Löschen von Artikeln aus dem Warenkorb. Bei zustandslosem Verhalten ändert das Simulieren des Suchens und Speicherns von Artikeln im Warenkorb nicht den Status des Warenkorbs. Das Testen der Prozesse zum Abrufen und Löschen von Daten aus dem Warenkorb schlägt fehl, da der Warenkorb in seinem Ausgangszustand (leer) bleibt, wie unten dargestellt:


Wenn dem virtuellen Einkaufswagen jedoch ein zustandsbehaftetes Verhalten zugewiesen wird, bei dem sein Status (leer oder mit einem oder mehreren Artikeln darin) von Test zu Test beibehalten wird und sich auch basierend auf den Eingaben der zu testenden Anwendung ändert, können Sie damit beginnen Testen Sie den Prozess sinnvoll.
Mithilfe von Stateful-Tests kann der virtualisierte Dienst nun den Status von leer in "mit hinzugefügtem Element gefüllt" ändern und die entsprechenden Informationen zurückgeben. Wenn ein Artikel zum Warenkorb hinzugefügt wird und der AUT den Warenkorb abfragt, werden die entsprechenden Daten zurückgegeben. Ein realistischerer Test ist mit Stateful Testing möglich. Wenn Sie den Warenkorb abfragen, wird der hinzugefügte Artikel wie unten gezeigt zurückgegeben:
Zusammenfassend ist es wichtig, dass vertrauenswürdige und wiederverwendbare virtuelle Dienste die imitieren können echt Service ausreichend, um der zu testenden Anwendung aussagekräftige Ergebnisse zu liefern, und dies kann ein zustandsbehaftetes Testen erfordern.
Zusätzlich zur Statusbereitschaft des virtuellen Dienstes selbst müssen Sie möglicherweise auch simulieren Änderungen im Zustand basierend auf verschiedenen potentiellen Eingängen, und dies wird aufgerufen Zustandsübergangstests.
Was ist Zustandsübergangstest?
Zustandsübergänge sind die Aktionskomponente von Zustandsautomaten, die definiert sind als:
„… Eine abstrakte Maschine, die sich zu einem bestimmten Zeitpunkt in genau einem von einer endlichen Anzahl von Zuständen befinden kann. Das FSM kann als Reaktion auf einige externe Eingaben von einem Zustand in einen anderen wechseln. Der Wechsel von einem Zustand in einen anderen wird als Übergang bezeichnet. Ein FSM wird durch eine Liste seiner Zustände, seines Anfangszustands und der Bedingungen für jeden Übergang definiert. “ - - Wikipedia
Zustandsautomaten sind eine nützliche Methode zur Beschreibung von Objekten und werden häufig explizit als Programmiermodell verwendet. In anderen Fällen, wie in unserem Warenkorb, gibt es möglicherweise eine implizite Zustandsmaschine, um deren Verhalten zu beschreiben. Betrachten Sie die folgende Zustandsmaschine für das obige Warenkorbbeispiel:


Der Anfangszustand des Warenkorbs ist leer, und wenn Artikel zum Warenkorb hinzugefügt werden, wechselt der Status von "Leer" zu "Artikel im Warenkorb". Übergänge werden als Reaktion auf Ereignisse eingeleitet (in diesem Fall Hinzufügen oder Entfernen eines Artikels zum Warenkorb).
Übergänge haben oft Bedingungen Bevor sie beispielsweise übernommen werden, erfolgt der Übergang zurück in den leeren Zustand nur, wenn die Anzahl der Elemente wieder Null ist. Übergänge oft Aktionen ausführenIn diesem Beispiel wird beispielsweise die Anzahl der Artikel im Warenkorb erhöht. Obwohl es unwahrscheinlich ist, dass der Wagen als Zustandsmaschine programmiert ist, gibt es eine implizite, die zur Definition seines Verhaltens nützlich ist.
Stellen Sie sich ein weiteres einfaches Beispiel für eine Benutzeranmeldekomponente vor, die einen Benutzer nach einer bestimmten Anzahl von Wiederholungsversuchen sperrt:


In der Anmeldekomponente wird der Ausgangszustand abgemeldet. Ein Benutzer kann nur angemeldet werden, wenn eine korrekte PIN eingegeben wurde. Nach einer definierten Anzahl von Anmeldeversuchen (MAX_RETRIES) wird das Konto gesperrt. In diesem Fall kann das gesperrte Konto als Endzustand betrachtet werden, da es jetzt eine Möglichkeit gibt, davon zu wechseln.
Zustandssimulation mit Parasoft Virtualize
Wie hilft dies beim Testen und bei virtuellen Diensten? Nun, es ist möglich zu verwenden Parasoft Virtualisieren um ein zustandsbehaftetes Verhalten zu simulieren, sodass Dienste von Testlauf zu Testlauf geeignete Antworten zurückgeben, die realistische Werte darstellen, die vom AUT erwartet werden.
Virtualisierte Dienste reagieren auf Eingaben von Tests und behalten Werte bei Bedarf bei, wodurch die Nützlichkeit erfasster und simulierter Testdaten erweitert wird, die statisch bleiben, sofern sie nicht durch ein zustandsbehaftetes Verhalten erweitert werden. In Parasoft Virtualize wird ein Dienst als "CRUD" (Erstellen, Lesen, Aktualisieren, Löschen) virtualisiert, um anzuzeigen, dass seine Testdatenquelle persistent ist und während des Tests nach Bedarf bearbeitet werden kann. Siehe Screenshot unten:


Parasoft Virtualize unterstützt ein zustandsbehaftetes Verhalten in der Testdatenquelle (oder Engine), die jedem virtuellen Dienst zugeordnet ist, der nicht nur Testdaten speichert, sondern auch das CRUD-Tool zum Bearbeiten von Daten basierend auf der Reaktion auf empfangene API-Anforderungen bereitstellt. Diese Aktualisierungen der Daten in der Testdatumquelle basieren auf Eingabeereignissen (wie die oben in Zustandsübergangsdiagrammen beschriebenen - Eingabeereignis kommt an, Zustandsübergang tritt auf, Aktion findet statt).
Um all dies zu unterstützen, ist das Testdatenverwaltungstool in Parasoft Virtualize so konfiguriert, dass ein Update basierend auf einer Datenquelle und einem ankommenden Ereignis durchgeführt wird:


Die Aktualisierungen der Testdatumquelle können einzelne Datenelemente oder ganze Objekte sein. Mit dem Tool können Sie auch Datensätze in Abhängigkeit von den erforderlichen Geschäftsregeln erstellen und löschen. Tatsächlich ist es leistungsfähig genug, um komplexes Verhalten zu simulieren, was die Frage aufwirft, wann zu viel Simulation zu viel ist.
Die Vor- und Nachteile einer Stateful Virtualization
Die Verwendung einer reinen Virtualisierung ist beim Testen sehr hilfreich, da dadurch die Komplexität des Umgangs mit einem realen Dienst verringert und die zu testende Anwendung isoliert wird. Durch das Entfernen von Live-Diensten können Tests gleichzeitig parallel auf mehreren Desktops gleichzeitig ausgeführt werden, ohne dass dies Auswirkungen auf die Produktionssysteme oder die Notwendigkeit einer dedizierten Kopie des Dienstes hat. Ein reiner virtueller Server gibt jedoch nur eine Bestätigung zurück, wie in "Ja, diese API wurde aufgerufen". In vielen Fällen reicht dies aus, bis dies natürlich nicht der Fall ist. Wenn komplexere Anwendungsfälle auftreten, müssen unsere virtualisierten Server „besser“ werden.
Anhand des obigen Warenkorbbeispiels ist es für Ihren virtuellen Einkaufsservice viel nützlicher, nicht nur zu bestätigen, dass Artikel zum Warenkorb hinzugefügt wurden, sondern auch das Hinzufügen von Artikeln zum Warenkorb zu simulieren. Auf diese Weise wird eine Abfrage zum Ermitteln der Anzahl der Artikel im Warenkorb mit einem korrekten Wert erfolgreich ausgeführt. Wir könnten auch einen Zustand "Wagen voll" simulieren, wie in der obigen Darstellung der Zustandsmaschine beschrieben. Stateful Behaviour ist notwendig, um unseren Tests aussagekräftigere Ergebnisse und eine bessere Abdeckung von Anwendungsfällen zu ermöglichen.
Aber irgendwann wird die Simulation der Geschäftslogik zu komplex. Die Absicht der Virtualisierung besteht darin, die Arbeit zu verringern und die Produktivität zu steigern, sodass die Rendite bei der Simulation der Komplexität abnimmt. Der Cutoff ist schwer zu sagen, aber wenn die Komplexität weit über unseren Warenkorb oder unser Anmeldebeispiel hinausgeht, ist es schwierig, den Aufwand zu rechtfertigen. Wie sind Sie sicher, dass Sie das richtige Verhalten simulieren? Sie möchten nicht, dass Ihre Anwendung so erstellt wird, dass sie mit einem simulierten Dienst funktioniert, sondern falsch mit der Realität! Die Nutzung von Live-Diensten wird bei der Validierung weiterhin benötigt (zum Glück von Parasoft Umgebungsmanager Modul erleichtert das Umschalten).
Zusammenfassung
Stateful Behaviour ist ein wichtiger Bestandteil bei der Erstellung realistischer virtualisierter Dienste, die zur Isolierung der zu testenden Anwendungen erforderlich sind. Die Fähigkeit, den Testdatenstatus von Test zu Test beizubehalten, ist für realistischere und nützlichere Tests erforderlich. Parasoft Virtualisieren bietet eine umfassende Testdatenverwaltungslösung, die virtualisierten Diensten mit zustandsbehafteten und zustandsbasierten Antworten auf Eingaben von API-Aufrufen Leben einhaucht.
Die Simulation sollte mit Vorsicht angewendet werden, da die Simulation komplexer Geschäftslogik zu sinkenden Renditen führt und das Risiko besteht, zu weit von der „Realität“ abzuweichen. Ein intelligenter Einsatz der Simulation bietet isoliert große Vorteile, was wiederum die Abhängigkeiten von Live-Servern entkoppelt. Da Live-Server jedoch immer noch eine Rolle bei der endgültigen Validierung spielen, sind Service-Virtualisierungstools wie Parasoft Virtualize erforderlich, um das Mischen und Anpassen dieser Umgebungen nahtlos zu unterstützen.
So wählen Sie das richtige Service-Virtualisierungstool aus