Empfohlenes Webinar: KI-gestütztes API-Testing: Ein No-Code-Ansatz zum Testen | Zum Video

Was sind verschiedene Arten von Tests für Microservices?

Headshot von Wilhelm Haaker, Director, Solution Engineering, Functional bei Parasoft
10. Mai 2023
7 min lesen

Microservices können mit vielen Problemen behaftet sein, wenn sie nicht mit den besten Tools getestet werden. Entdecken Sie, wie die automatisierten Testlösungen von Parasoft Ihnen helfen können, Probleme mit Microservices zu lösen.

Gründlich, genau und effizient Methoden zum Testen von Microservices sind in der heutigen Internet- und mobilen App-orientierten Welt unerlässlich. In diesem Stück betrachten wir:

  • Was machen Microservices?
  • Wie sie es tun.
  • Die verschiedenen Arten von Microservices-Softwaretests, die verfügbar sind.

Übersicht über Microservices

Wenn eine Person mit einer Website interagiert oder eine App nutzt, laufen zahlreiche Funktionen „unter der Oberfläche“. Wenn Sie beispielsweise ein Produkt bei Amazon kaufen, kaufen Sie den Artikel ein und achten dabei auf Preis, Größe, Farbe und andere Optionen. Dann treffen Sie Ihre Auswahl und gehen in den Kassenbereich.

Von dort aus wählen Sie Liefer- und Zahlungsoptionen aus und schließen schließlich die Transaktion ab. Währenddessen sind zahlreiche Microservices in Betrieb. Dazu gehört Ihre Kundeninteraktion, aber auch die komplexe Programmierung, die auf der App oder Website ungesehen abläuft und die Transaktion nahtlos und einfach erscheinen lässt.

Architektur

Microservices ist eine Programmierarchitektur, die es Entwicklern ermöglicht, flexible, hoch skalierbare Anwendungen wie das obige Beispiel zu entwerfen, aber auch Unternehmen und Branchen wie Gesundheitswesen, Finanzen, Versicherungen, Telekommunikation, IoT und KI-Apps zu erleichtern. Diese Methode zerlegt eine Anwendung und zerlegt sie in separate Dienste (Microservices), die bestimmte Funktionen ausführen.

Jeder Microservice verrichtet und verbindet sich mit anderen und kommuniziert mit ihnen über Standard-APIs (Application Programming Interfaces). Dies ermöglicht Entwicklern, Dienste auf verschiedenen Technologien in verschiedenen Sprachen zu schreiben. Somit sind Microservices flexibel und skalierbar. Darüber hinaus hat jeder Microservice eine bestimmte Aufgabe und ist daher klein und relativ einfach. (Der Begriff Microservice bezieht sich auf die singuläre Funktion des Dienstes, nicht auf seine physische Größe.)

Fitch bietet hohe Codeabdeckung und Qualität für Microservices-Anwendungen

Entwickler verwenden gerne Microservices-Architekturen aufgrund ihrer modularen Eigenschaften, die das Entwickeln und Testen einfacher als monolithische Architekturen machen. Die weit verbreitete Verwendung von Function-as-a-Service und Cloud-nativen, serverlosen Bereitstellungen wie Microsoft Azure Cloud Functions und AWS Lambda haben die ideale Umgebung für Microservices geschaffen, um in der heutigen IT-Welt erfolgreich zu sein. Microservices in diesen Bereitstellungen ermöglichen Agilität und schnellere Lieferzeiten.

In gewisser Weise entstanden Microservices, die übrigens in einer monolithischen Architektur verwurzelt sind, als Reaktion auf die Notwendigkeit, sehr unregelmäßigen Benutzerverkehr zu bewältigen. Wenn Entwickler Anwendungsfunktionen in separate Dienste aufteilen, werden die Funktionen nach Bedarf verkleinert oder vergrößert, um sicherzustellen, dass genügend Rechenleistung verfügbar ist. Dies kann kompliziert werden, wenn die Anwendung ein sich ständig änderndes, dynamisches Netzwerk-Terrain entwickelt. Daher sind strenge Funktionstests erforderlich.

Ist das Testen von Microservices komplex?

Das Testen von Microservices kann kompliziert sein. Mit den richtigen Testwerkzeugen, Kenntnissen und Ansätzen kann dies weniger werden. Sehen wir uns einige der Elemente an, die das Testen von Microservices komplex machen können.

Die Vorgehensweise

In vielerlei Hinsicht ähnelt das automatische Testen von Microservices dem Testansatz für Anwendungen, den Softwareentwickler auf traditionellen Architekturen aufbauen. Microservices verwenden bekannte Technologien wie REST und Message Broker, für die Softwareautoren bereits während der Softwareentwicklung Best Practices und etablierte Testtools verwenden.

Die besondere Herausforderung bei Microservices ist die Vielzahl von Diensten, aus denen eine Anwendung besteht. Hinzu kommt die Tatsache, dass Microservices voneinander abhängig sind. Eine zusätzliche Überlegung ist, dass diese Dienste auch dann funktionieren müssen, wenn andere Dienste, von denen sie abhängig sind, nicht verfügbar sind oder nicht richtig reagieren.

Haupttypen von Microservices-Tests

Microservices-Softwaretests stellen sicher, dass die Microservices effizient und zeitnah das tun, was sie tun sollen. Branchenweit sind die drei wichtigsten Arten von Softwaretests für Microservices:

  • Funktionsprüfung zum Testen der Geschäftslogik und des Verhaltens des Dienstes. Dies ist komplizierter als das Testen in einer traditionellen monolithischen Architektur, da Microservices keine Benutzeroberfläche zum einfachen Testen haben. Die zu testende Schnittstelle stellt eine Art Remote-Client dar, der über HTTP oder ein anderes Protokoll kommuniziert.
  • Lastprüfung zum Freilegen von Anwendungsbereichen, die nicht richtig gestaltet sind und bei hohem Verkehrsaufkommen zu Abstürzen führen können. Bei Microservices durchläuft jeder Aufruf eines Dienstes das Netzwerk, was bedeutet, dass andere Aktivitäten im Netzwerk die Antwortzeiten beeinflussen können.
  • Belastbarkeitstests um herauszufinden, wie die Software auf potenzielle Infrastrukturausfälle reagiert. Zum Beispiel, wenn ein Server, auf dem ein bestimmter Dienst ausgeführt wird, nicht verfügbar ist, wenn er abstürzt oder wenn ein Teil eines Netzwerks den Datenverkehr stoppt. In diesen Fällen muss der Entwickler testen, ob die Microservices-Anwendung an Endpunkten und anderswo weiterhin ausgeführt werden kann.

Spezifische Arten von Microservices-Tests

Wenn ein Entwickler das System testen muss, kann er dies relativ einfach tun, da die Microservices getrennt sind, obwohl sie zusammenarbeiten. Wenn Programmierer dagegen Dienste auf Monolithen oder einer monolithischen Architektur erstellen, ist der Anwendungscode untrennbar verbunden, was das Testen schwierig und langsam macht.

Um die oben genannten grundlegenden Tests durchzuführen, verwenden Entwickler die folgenden.

Unit Tests

Eine oft übersehene Praxis beim Testen von Microservices ist das Unit-Testen. Was sind Unit-Tests? Diese Tests verifizieren, dass die Methoden- und Klassenentwickler wie erwartet funktionieren. Während Unit-Tests eine hochtechnische Aufgabe für Entwickler sind, bietet eine robuste Suite von Unit-Tests ein wichtiges Sicherheitsnetz, um unbeabsichtigte Folgen abzufangen, wenn Entwickler den Code ändern. Und es zahlt sich aus, wenn Entwickler genau darauf aufmerksam gemacht werden, wo im Code sie bestehende Funktionen beschädigt haben.

Dies ist eine wertvolle Praxis für das Schreiben hochwertiger Software. Unit-Tests allein reichen jedoch nicht aus. Nur weil alle Teile eines Motors nach perfekten Spezifikationen bearbeitet werden, bedeutet dies nicht, dass der Motor wie erwartet läuft und funktioniert.

Komponententest

Dieser Microservices-Test konzentriert sich nicht darauf, wie der Entwickler den Microservices-Code geschrieben hat, sondern konzentriert sich stattdessen darauf, den Microservice als Blackbox auszuführen und den Datenverkehr über die Schnittstelle zu testen. Aus der Perspektive eines einzelnen Microservice testen Sie jetzt die Engine, um sicherzustellen, dass sie ihre Anforderungen erfüllt.

In den meisten Fällen testen Sie einen REST-Dienst. Sie möchten also automatisierte Tests, die als Clients des Dienstes fungieren, verschiedene positive und negative Anfragen an den Dienst senden und die Antworten überprüfen, die der Dienst zurückgibt.

Eine Herausforderung besteht darin, dass es komplex und schwierig sein kann, Microservices isoliert zu testen, da sie oft viele andere Microservices aufrufen, um auf die Anfrage Ihres Testclients zu antworten. Um einen Microservice zu testen, müssen möglicherweise Dutzende weitere bereitgestellt und verfügbar sein, damit Ihr Microservice kommunizieren kann, um ihn ordnungsgemäß zu testen.

Tools zur Servicevirtualisierung kommen zur Rettung und ermöglichen es Testern, andere Microservices zu simulieren, um den Microservice isoliert zu testen, wodurch die Testumgebung vereinfacht und die Testautomatisierung erleichtert wird. Dabei kann es sich um Stubs und Testdoubles handeln. Stellen Sie sich die Servicevirtualisierung so vor, als würden Sie einen Automotor in einem Labor an ein künstliches Getriebe anschließen, damit Sie überprüfen können, ob es richtig angeschlossen ist und die erwartete Leistung an den Rest des Autos liefert, ohne es tatsächlich in ein Auto einzubauen.

So wählen Sie die richtige Service-Virtualisierungslösung aus

Integrationstests

Wenn Sie Servicevirtualisierung verwenden, um das Testen des Microservice als einzelne Komponente zu vereinfachen und zu stabilisieren, möchten Sie auch testen, ob der Microservice mit den anderen beteiligten REAL-Microservices funktioniert. Entwickler tun dies oft in einer „QA“- oder „Integrations“-Phase, in der viele der erforderlichen Systeme im gesamten Ökosystem bereitgestellt und zusammen integriert werden. Mit dieser Testpraxis beginnen Sie, das Auto zusammenzubauen, um sicherzustellen, dass jedes Teil passt und zusammenarbeitet, aber Sie testen es noch nicht auf der Straße.

End-to-End-Tests

Auch Systemtest genannt. Irgendwann hat ein großes Web von Microservices Einstiegspunkte, an denen die Endbenutzer der Anwendung interagieren. Beispielsweise kommuniziert eine Netflix-App auf Ihrem Apple TV mit Microservices im Netflix-Rechenzentrum. Sie stellen jedoch nur einen kleinen Teil ihrer Kernfunktionen dar, bei denen es sich um kleine, einzelne Komponenten handelt, die für bestimmte Dinge wie einen Empfehlungsdienst, einen Video-Streaming-Dienst, einen Kontodetaildienst usw. verantwortlich sind. Auch dies ist also eine Gelegenheit, Microservices zu testen.

Diese Interaktionen automatisch zu testen, egal ob im Web oder mobil, ist oft quälend langsam und wartungsintensiv. Für kritische Pfade und User Journeys ist dies ein Muss, aber die Möglichkeit, diese vollständigen oder End-to-End-Transaktionen aus der Sicht des Endbenutzers als eine Abfolge von Microservice-Aufrufen darzustellen, hat viele Vorteile.

Sie entfernen im Wesentlichen die Benutzeroberfläche und simulieren alle API-Aufrufe, die die Benutzeroberfläche an Ihre Microservices-Architektur ausführt, damit Sie überprüfen können, ob alle Microservices für den größeren Endbenutzer-/Geschäftsanforderungskontext ordnungsgemäß zusammenarbeiten. Sie fahren jetzt mit dem Auto auf der Straße, versetzen sich in die Lage Ihrer Kunden und stellen sicher, dass das Auto hält, was es verspricht.

Übersichtstabelle für bestimmte Arten von Tests für Microservices

Art des TestsWas es machtVorteileNachteile
GerätetestTests, die von den Klassen- und Methodenprogrammierern geschrieben werden, stellen das Projekt beim Erstellen und Bereitstellen genau dar.Es macht das Codieren agiler, verbessert die Codequalität und deckt Fehler frühzeitig auf. Änderungen sind relativ einfach.Entwickler sind für Unit-Tests verantwortlich, was die Kosten eines Projekts zusätzlich erhöht. Dies kann es schwierig machen, ein Management zu rechtfertigen, das Kosten über Qualität stellt.
KomponententestFührt den Microservice als Blackbox aus und testet das Verhalten der Schnittstelle.Entwicklungsteams können früher im Release-Zyklus sicherstellen, dass ihre Microservices korrekt funktionieren, da Tests früher im Prozess durchgeführt werden können. Selbstversorgung.Es kann schwierig sein, Microservices isoliert zu testen.
IntegrationstestStimuliert die Interaktion zwischen Modulen; testet, ob der Microservice mit den anderen beteiligten REAL Microservices funktioniert.Hilft, Probleme im Zusammenhang mit der Interaktion zwischen Modulen zu finden. Hilft sicherzustellen, dass Module und ihre Ergebnisse für das Projekt geeignet sind.Die höhere Komplexität einer vollständigeren Testumgebung verdrängt das Testen weiter und verzögert das Feedback an die Entwickler. Größere Integrationstests können auch Probleme bereiten, die Hauptursache eines Defekts zu finden.
End-to-End-TestEntfernt die Benutzeroberfläche und simuliert alle API-Aufrufe.Testet die komplette Transaktion und überprüft, ob alle Microservices zusammenarbeiten.Komplexität, Kosten und Geschwindigkeit von Tests nehmen zu; Sich ausschließlich auf End-to-End-Tests zu verlassen, ist für eine agile Softwareentwicklung zu langsam.

Automatisierte Testlösungen für jeden Typ

Die von Parasoft angebotenen automatisierten Microservices-Testsoftwaretools zum Testen von Microservices adressieren nahezu alle potenziellen Microservice-Probleme.

  • Unit Testing. Parasoft Jtest verfügt über einen interaktiven, automatisierten Workflow zur Erstellung von Komponententests innerhalb der IDE (integrierte Entwicklungsumgebung) des Entwicklers, der den Zeitaufwand für Komponententests um die Hälfte reduziert. Die JUnit-Codegenerierung von Jtest verwendet die lange Geschichte der Codeanalysetechnologie von Parasoft, um den Java-Code des Microservices zu untersuchen und die entsprechenden Mocks (gefälschte Versionen externer [oder interner] Dienste) zu generieren, damit der Entwickler eine bestimmte Methode oder Klasse isoliert von anderen testen kann Schichten des Codes. Die Möglichkeit, externe Abhängigkeiten zu simulieren, ist von entscheidender Bedeutung, wenn Entwickler mit ihren Komponententests eine hohe Codeabdeckung erreichen müssen.
  • Komponentenprüfung. Mit Parasoft SOAtest können Tester Test-Clients erstellen, die Anforderungsnachrichten an den Microservice senden und dann die zurückkommenden Antworten überprüfen. Parasoft Virtualisieren ist ein Begleitprodukt, das für die Service-Virtualisierung verantwortlich ist – die Simulation eines Endpunkts, der sich wie ein echter Ding verhält. Gemeinsam ermöglichen SOAtest und Virtualize eine durchgängige Automatisierungsstrategie für Komponententests von Microservices.
  • Integrationstests. SOAtest ist Parasofts API („Microservices“) Testframework, das über 120 Nachrichtenformate und Protokolle unterstützt. Unabhängig davon, ob die Architektur Ihres Systems modern oder veraltet ist, können Sie die Integrationspunkte problemlos testen.
  • End-to-End/Systemtests. Parasoft SOAtest verfügt über eine KI-Technologie, die den aufgezeichneten API-Verkehr analysiert, wenn Benutzer die Benutzeroberfläche einer Anwendung verwenden. Durch die Verwendung von Testplänen, mit denen weniger technische Tester und Geschäftsanalysten vertrauter sind, und die Aufzeichnung der zugrunde liegenden API-Aufrufe, die ein Programm durchführt, schließt Parasoft die Lücke zwischen API-Nutzung und API-Design. Dies hilft Testern, den Prozess auf der API-Ebene zu rationalisieren.

Überprüfen nichtfunktionaler Anforderungen

Neben dem Testen von Units und funktionalen Microservices ist es für Entwickler wichtig, auch nichtfunktionale Anforderungen zu überprüfen. Speziell für Sicherheits-, Last- und Leistungstests unter Verwendung des entsprechenden Schemas und der entsprechenden Metriken. Automatisierte Microservices-Tests Software von Parasoft ist auch Ihre Quelle dafür.

Sicherheitstests

Hacker können Bereiche unter dem Dach der Microservices ausnutzen. Daher müssen Entwickler Microservices gründlich testen, damit sie gegen Sicherheitslücken geschützt sind. Parasoft Jtest verfügt über eine statische Codeanalysetechnologie, die den zugrunde liegenden Quellcode scannt und Sicherheitslücken in der Codierung identifiziert, damit Entwickler diese beheben können. Parasoft ermöglicht es Testern auch, die funktionalen Testfälle, die sie in SOAtest geschrieben haben, wiederzuverwenden, um Penetrationstests des Microservice durchzuführen.

Was ist statische Analyse? Tools zur Code-Analyse

Last- und Leistungstests

Um sicherzustellen, dass der Microservice die SLAs (Service Level Agreements) einhalten kann, müssen Entwickler verstehen, wie SLAs unter Last funktionieren, und auch Sollbruchstellen ermitteln.

Parasoft SOAtest enthält ein Modul namens Lade Test die es dem Tester ermöglicht, die von ihm geschriebenen Funktionstests wiederzuverwenden und als Last- und Leistungstest auszuführen. Dies spart Zeit, indem bereits entwickelte Tester wiederverwendet werden, anstatt „das Rad neu zu erfinden“ und möglicherweise mehrere Tools zu verwenden.

Schlussfolgerung

Moderne mobile und Web-UIs bauen auf APIs auf und hierin liegt eine weitere Möglichkeit, den API-Traffic aus UI-Tests zu erfassen, um Sie beim Testen von API-Szenarien zu unterstützen. Diese Frontend-APIs sind im Vergleich zu den Kerndiensten in Ihrer Architektur möglicherweise nicht gut dokumentiert oder gut getestet, aber das ist ein noch wichtigerer Grund, sie zu testen!

APIs sind zum Fundament dafür geworden, wie Unternehmen ihren Benutzern schnell Funktionen bereitstellen. Aber die Funktionalität ist nicht die einzige Sorge, die Ihr Management nachts wach hält.

Elastizität, Leistung und Sicherheitdienst sind allesamt nichtfunktionale Anforderungen, die weiterhin mit schaurigen Schlagzeilen die Aufmerksamkeit der Öffentlichkeit auf sich ziehen. Viele Organisationen haben Shift-Left-Initiativen, um zu versuchen, ihren Softwarebereitstellungsprozess neu zu organisieren, um diesen hohen Prioritäten Rechnung zu tragen. Die Verwendung eines Frameworks, das gut geeignet ist, um sowohl funktionales als auch nicht funktionales Testen abzudecken, ohne dass Sie ein halbes Dutzend Tools zusammenfassen müssen, reduziert Ihren Testaufwand.

Parasoft-Lösungen decken die wesentlichen Anliegen des Microservices-Tests ab und machen Software sicherer, effizienter, weniger anfällig für Abstürze und letztendlich in jeder Hinsicht besser. Dies kann Arbeitsabläufe erheblich verbessern und den Debugging-Aufwand reduzieren.

Erfahren Sie mehr über die leistungsstarken Testlösungen für Microservices, die Ihr Unternehmen verdient.