Empfohlenes Webinar: Vorstellung von Parasoft C/C++test CT für kontinuierliche Tests und Compliance-Exzellenz | Zum Video

From Zero to Hero: Ein GraphQL-Testleitfaden für Entwickler

Headshot von Grigori Trofimov, Senior Solution Architect bei Parasoft
8. Mai 2023
8 min lesen

Das Erreichen vereinfachter GraphQL-Tests kann möglich sein, wenn Sie Testautomatisierung einsetzen. Lesen Sie weiter, um herauszufinden, wie Parasoft SOAtest die Erstellung, Verwaltung und Orchestrierung von GraphQL-Tests vereinfacht.

Das Testen von GraphQL-Endpunkten ist ebenso notwendig wie alle anderen Endpunkttests, und automatisierte Tests sind hier, um zu helfen. Sehen wir uns an, wie man GraphQL-Endpunkte mit Testautomatisierung testet!

Was ist GraphQL?

GraphQL ist eine Abfragesprache für APIs, die von Facebook ab 2012 entwickelt wurde, um ein bestimmtes Problem zu lösen – mit dem Aufkommen von Smartphones und mobilen Webbrowsern war die Verwendung von RESTful-API-Aufrufen langsam und ineffizient, insbesondere in Mobilfunknetzen. Mehrere API-Aufrufe an mehrere Endpunkte nahmen Zeit in Anspruch und lieferten oft entweder mehr Informationen als nötig oder nicht genug. Die großen zurückgegebenen Datenmengen in Kombination mit mehreren API-Aufrufen führten zu einer schlechten Benutzererfahrung.

Als sie 2015 in die Facebook-App für iOS implementiert wurde, erkannte die Tech-Welt die Vorteile der neuen Technologie, was zu einer schnellen Übernahme durch viele führende Unternehmen führte. 2015 wurde GraphQL Open Source, und 2019 wurde die GraphQL Foundation gegründet, um die Spezifikation und Referenzimplementierungen weiterzuentwickeln. Obwohl ursprünglich für mobiles Computing konzipiert, hat sich die Implementierung auf Desktop- und Server-Computing ausgeweitet. Die Einführung von GraphQL hat sich auf Unternehmen und Organisationen wie GitHub, Pinterest, Intuit, Coursera und Shopify ausgeweitet.

GraphQL vs. traditionelle REST-APIs

Es gibt viele Vorteile, die GraphQL gegenüber herkömmlichen REST-API-Schnittstellen bieten kann. Während jede Technologieimplementierung Kompromisse hat, bietet GraphQL mehr Flexibilität beim Abrufen von Informationen. Eine einzelne, gut geschriebene GraphQL-Abfrage kann Informationen zurückgeben, die mehrere RESTful-API-Aufrufe mit HTTP-Anforderungen erfordern würden. Forscher und Entwickler haben herausgefunden, dass GraphQL-Aufrufe Datensätze zurückgeben, die über 90 % kleiner sind als die Verwendung von RESTful-APIs, um dieselben Daten zu erfassen.

Wenn Sie eine RESTful-API zum Abrufen von Daten verwenden, müssen Sie oft mehrere API-Aufrufe durchführen, um alle gesuchten Informationen zu erhalten. Wenn Sie sich beispielsweise bei Ihrer Bank anmelden, müssen Sie zuerst Ihre Kundennummer abrufen. Sobald Sie Ihre Kundennummer haben, können Sie Ihre Kontonummer erhalten. Von dort aus können Sie Ihren Kontostand abrufen:

Bild mit Code bei Verwendung einer RESTful-API zum Abrufen von Daten für den Kontostand.

An REST-APIs ist nichts auszusetzen, aber mehrere API-Aufrufe sind oft langsam, datenintensiv und ineffizient. Im obigen Beispiel mussten Sie, um Ihren Bankkontostand abzurufen, eine Sequenz aus drei miteinander verketteten API-Aufrufen erstellen, von denen jeder eine ordnungsgemäße Anfrage und eine vollständige, durch das Schema definierte Antwort war. Eine GraphQL-Anfrage ist schlanker und spezifischer und befasst sich nur mit den drei Werten Kunden-ID, Konto-ID und Saldo:

Bild des schlanken GraphQL-Codes für Kundendaten: Kunden-ID, Konto-ID und Saldo.

Das obige Beispiel mag trivial aussehen, aber es zeigt, wie eine Anfrage, die traditionell mit drei API-Aufrufen ausgeführt würde, mit nur einem mit einer GraphQL-Abfrage ausgeführt werden kann. Das Beste daran ist, dass keine Neuimplementierung Ihrer vorhandenen Funktionalität erforderlich ist.

Es gibt viele zusätzliche Vor- und Nachteile zwischen REST und GraphQL, aber es ist wichtig zu beachten, dass sich GraphQL und REST-APIs nicht gegenseitig ausschließen und die Übernahme der einen die andere nicht ausschließt. Tatsächlich arbeiten die beiden recht harmonisch zusammen.

Wann sollten Sie GraphQL verwenden?

Berücksichtigen Sie bei der Entscheidung, ob Sie REST-APIs oder GraphQL verwenden, die Komplexität Ihrer Daten und die Flexibilität, die Sie bei Ihren Abfragen und Mutationen benötigen. Wenn Ihre Daten relativ einfach sind und Ihre API eine gut definierte, ressourcenbasierte Schnittstelle erfordert, sind REST-APIs möglicherweise der richtige Weg.

Auf der anderen Seite, wenn Sie komplexe Daten haben, die erforderlich sind flexible Abfragen und Mutationen und Sie möchten das Über- und Unterholen minimieren, dann ist GraphQL möglicherweise besser geeignet.

Es erfordert ein sorgfältiges Design, um GraphQL-APIs und Abfragen mit der Schema- und Typorganisation zu erstellen. REST-APIs sind möglicherweise einfacher zu entwerfen und abzufragen, da Sie einzelne Datenanforderungen trennen können, aber ihre Ausführung kann auch länger dauern. Im Allgemeinen eignen sich REST-APIs besser für sehr komplexe Abfragen, während GraphQL-Abfragen mehr Optimierung und schnelleren Betrieb bieten können.

Wenn Echtzeitdaten und mehrere API-Versionen für Ihre Anwendung wichtig sind, kann GraphQL diese Vorteile bieten, während die Implementierung von REST-APIs möglicherweise mehr Aufwand erfordert. Letztendlich hängt die Wahl zwischen REST-APIs und GraphQL von den spezifischen Anforderungen Ihres Projekts und den Kompromissen ab, die Sie einzugehen bereit sind.

Verwenden Sie GraphQL, wenn Sie eine einfache und effiziente Schnittstelle für Verbraucher erstellen möchten, die Ihre APIs nutzen möchten. Möglicherweise möchten Sie auch GraphQL nutzen, um den gesamten zwischen Ihrem Frontend und dem Backend ausgetauschten Datenverkehr zu reduzieren, wie es Facebook für den mobilen Datenverkehr getan hat. Wenn Sie alle relevanten Daten in einer einzigen Abfrage abrufen möchten, kann GraphQL dies sehr gut tun.

Warum Sie Tests für GraphQL schreiben sollten

Wie bei andere Funktionstests, ist es wichtig, GraphQL-APIs zu testen, um sicherzustellen, dass die Geschäftslogik der Software korrekt funktioniert. Sie müssen sicherstellen, dass sich die Abfragen, Schemas und alle Mutationen wie erwartet verhalten und reagieren. Das Schreiben und Ausführen von Tests hilft Entwicklern und QA, Fehler frühzeitig zu finden – bevor sie in die Produktion gehen. Es stellt auch sicher, dass Sie eine ausreichende Testabdeckung für die API und die Anwendung haben

So testen Sie GraphQL-API-Implementierungen

GraphQL ist eine Abstraktionsschicht, die zwischen den Front-End-Systemen und den Back-End-APIs besteht, sodass Tests unbedingt erforderlich sind. Mit GraphQL-Abfragen können Sie auf mehrere Ressourcen im Backend zugreifen und diese Daten zu einer einzigen aussagekräftigen Antwort zusammenfassen.

Screenshot von GraphQL mit Codebeispielen für Beschreibungsdaten, Fragen, was Sie wollen, vorhersehbare Ergebnisse.

Backend-APIs sind in der Regel granular, da wir neue, wiederverwendbare Bausteine ​​für unsere Anwendungen erstellen möchten. Dies überträgt sich jedoch nicht direkt auf unsere User Stories oder auf die Aktionen, die wir über das Frontend ausführen können möchten. GraphQL ist eine Möglichkeit, die Interaktionen mit Ihren Backend-Daten zu vereinfachen, indem eine Schnittstelle mit Schemas verwendet wird, die das Systemverhalten beschreiben, sodass Sie effiziente Daten von Ihren APIs erhalten können.

Jedes der GraphQL-Schemas ist Funktionen zugeordnet. Diese Funktionen führen dann nachfolgende Aufrufe an das Back-End für Ihre APIs, Datenbanken und alle anderen Ressourcen durch, die zum Sammeln der angeforderten Daten erforderlich sind.

Die Funktionen stellen dann die erforderlichen Daten zu einer Antwort zusammen, die die gleiche Form wie die Anfrage behält, wodurch es sehr einfach ist zu verstehen, welche Daten welchen Elementen in der Anfrage zugeordnet sind.

Fragen Sie nach, was Sie brauchen,
genau das bekommen.

-graphql.org

Darüber hinaus kann GraphQL so eingerichtet werden, dass mehrere Backend-Services aufgerufen werden, während die Abfrageantwort zusammengestellt wird. Dies reduziert die Gesamtzeit, die ein Verbraucher für die Navigation durch API-Dokumente benötigt, um zu verstehen und zu lesen, welche Informationen bei einem Anruf verfügbar sind.

Arten von Tests

Abfragetests

Ein Abfragetest ist eine Anforderung von Daten aus einer oder mehreren Datenbanktabellen. Eine Abfrage kann entweder eine Anforderung von Datenergebnissen, eine Aktion für die Daten oder beides sein.

Mutationstests

Ein Mutationstest ist eine Form des Testens, bei der bestimmte Komponenten des Codes einer Anwendung modifiziert werden, um festzustellen, ob ein Testtool die Änderungen erkennen kann. Mutationstests werden normalerweise verwendet, um Komponententests durchzuführen, um festzustellen, ob ein Softwaretool Code erkennen kann, der nicht ordnungsgemäß getestet wurde oder versteckte Fehler aufweist, die andere Testmethoden nicht erkennen.

Belastungstests

Ein Lasttest ist eine Art Leistungstest, der Ihre Anwendung oder Website einer Belastung aussetzt, die realen Bedingungen ähnelt. Ohne Belastungstests könnte Ihre Software ausfallen, wenn es wirklich darauf ankommt. Lasttest-Tools untersuchen, wie sich Ihre Anwendung bei normaler und hoher Last verhält.

Sicherheitstests

Ein Sicherheitstest ist eine Testform, die Schwachstellen, Risiken und Bedrohungen in einer Softwareanwendung aufdeckt und Angriffe von Hackern verhindert. Ein Sicherheitstest identifiziert mögliche Schwachstellen des Systems, die Ihre Anwendung, Informationen, Benutzer oder Ihr Unternehmen gefährden könnten.

Schematests

Schematests, auch Mapping-Tests genannt, sind eine Form des Softwaretests, die Objekte einer Frontend-Anwendung mit entsprechenden Datenbankobjekten validieren. Schematests werden verwendet, um nicht zugeordnete Objekte in einer Datenbank zu finden, wie Tabellen, Ansichten oder Spalten.

Automatisiertes Testen von GraphQL-Endpunkten

GraphQL ist eine leistungsstarke Technologie, die es Ihren API-Nutzern ermöglicht, effizienter auf ihre Informationen zuzugreifen. Um sicherzustellen, dass das Erlebnis wie beabsichtigt funktioniert, müssen Sie Ihre GraphQL-APIs validieren. Das ist wo Testautomatisierung kommt in.

Es stehen viele Automatisierungstools zum Testen Ihrer GraphQL-APIs zur Verfügung. In diesem Fall verwende ich Parasoft SOAtest, ein weit verbreitetes API-Tests Lösung, die die oft entmutigende Herausforderung der Validierung Ihrer kritischen APIs über mehrere Technologien hinweg vereinfacht. Es unterstützt eine breite Palette von Nachrichtenformate und Protokolle, einschließlich GraphQL.

GraphQL-Endpunkte akzeptieren Abfragen als Zeichenfolgen und geben JSON-Antworten mit den Abfrageergebnissen zurück. Dies passt gut zu SOAtest, da Abfragen von REST-Clients zum Senden der Abfragen durchgeführt werden können und die Validierung durch vorhandene JSON-Verifizierungstools erfolgen kann.

Betrachten Sie die folgende einfache GraphQL-Beispielabfrage.

Bild eines einfachen Codebeispiels für eine GraphQL-Abfrage.

Eine erwartete Rendite wäre ungefähr so:

Bild des Codes, der eine erwartete Rückgabe einer GraphQL-Abfrage zeigt.

Dieselbe Abfrage kann in Parasoft SOAtest über den GraphQL-Client im Literal- oder Formularmodus erstellt werden.

Screenshot von Parasoft SOAtest, der den GraphQL-Client zeigt.

In SOAtest werden die GraphQL-Abfragen als Zeichenfolge mit dem Namen query gesendet. Antworten werden in JSON zurückgegeben, das SOAtest problemlos interpretieren und in seinem Traffic Viewer darstellen kann.

Screenshot von Parasoft SOAtest mit einer GraphQL-Abfrage.

Die zurückgegebenen Werte werden erwartet. Wir brauchen eine automatisierte Methode, um diese Ergebnisse zu überprüfen. Der SOAtest JSON Assertor ist hier praktisch.

Überprüfen von GraphQL-Antworten

SOAtest verifiziert JSON-Antworten mithilfe von Assertionen, die mit seinem JSON-Assertor-Tool konfiguriert werden. Hier ist ein Beispiel für eine Überprüfung, ob der zurückgegebene Vorname eine Zeichenfolge „Luis“ ist, von der wir wissen, dass sie kein gültiger Wert ist.

Screenshot von Parasoft SOAtest mit dem JSON-Assertor.

Wenn Sie den Test erneut ausführen, schlägt der Test fehl.

Screenshot von Parasoft SOAtest, der einen fehlgeschlagenen Test in einer GraphQL-Client-Testsuite zeigt.

Wie Sie sehen können, ist das Testen von GraphQL in SOAtest unter Verwendung bereits vorhandener Funktionen unkompliziert.

Screenshot von Parasoft SOAtest, der Testergebnisse von GraphQL zeigt, in denen erwarteter und tatsächlicher Inhalt verglichen werden.

Was ist mit der Authentifizierung? Dies wird von SOAtest gehandhabt und die vorhandenen Client-Authentifizierungstools funktionieren auch mit GraphQL-Endpunkten.

Screenshot von Parasoft SOAtest mit einem GraphQL-Client-Authentifizierungstool.

Warum Parasoft SOAtest für GraphQL-Tests?

Die Vorteile, die SOAtest für REST-, SOAP- und andere API-Tests bringt, bleiben für GraphQL gleich. Parasoft SOAtest wurde entwickelt, um in die vorhandene Testinfrastruktur zu passen, und beschleunigt das Testen, was eine agile Entwicklung ermöglicht, indem es Testern hilft, intelligenter mit skriptlosen Tests zu arbeiten, die die Zusammenarbeit zwischen Entwicklungs-, Test-, Leistungs- und Sicherheitsteams erleichtern.

Parasoft SOAtest erleichtert das Erstellen, Verwalten, Orchestrieren, Ausführen, Schreiben und Analysieren von Tests. Über GraphQL hinaus erleichtert die Unterstützung von SOAtest für über 120 Nachrichtenformate und -protokolle sowie die durch KI und maschinelles Lernen unterstützte Testgenerierung API-Tests.

Siehe GraphQL-Tests in Aktion

Sehen Sie sich dieses Video an, in dem wir Ihnen zeigen, wie Sie mit SOAtest GraphQL-Abfragen an APIs senden, die GraphQL implementiert haben. Wenn Sie das hilfreich finden, teilen Sie es mit anderen!

Sehen Sie sich die führende API- und UI-Funktionstestlösung an, die von AI und ML in Aktion unterstützt wird.