Erfahren Sie, wie die Continuous Quality Platform von Parasoft dabei hilft, Testumgebungen zu steuern und zu verwalten, um zuverlässig hochwertige Software zu liefern. Für Demo registrieren >>

BLOG

Was ist GraphQL und wie wird es getestet?

Was ist GraphQL und wie wird es getestet? Lesezeit: 6 Minuten
Das Testen von GraphQL-Endpunkten ist genauso notwendig wie jedes andere Testen von Endpunkten, und automatisierte Tests helfen hier. Erfahren Sie unten mehr darüber, wie Sie GraphQL-Endpunkte mit Testautomatisierung testen können!

GraphQL ist eine Abfragesprache für APIs, die bei Facebook gestartet wurde, bevor sie 2016 als Open-Source-Version bereitgestellt wurde. Die Vereinfachung der von GraphQL bereitgestellten Abfragen und Antworten ist auf die Verwendung in mobilen Anwendungen zurückzuführen. Sie ist jedoch allgemein nützlich, um die Verwendung komplexer APIs zu vereinfachen und gleichzeitig die Menge der zurückgegebenen Daten.

Was ist GraphQL?

Als das GraphQL-Projekt ursprünglich erstellt wurde, wurde es erstellt, um ein bestimmtes Problem zu lösen. Im Jahr 2011, als die meisten Benutzer über ihren Browser mit Anwendungen in Verbindung standen, kam es zu einer starken Migration von Webservern auf Mobilgeräte. Insbesondere im Fall von Facebook war es erforderlich, mehrere APIs von mehreren verschiedenen Speicherorten in der Anwendung aus aufzurufen. Je nachdem, was mit dem Szenario erreicht werden soll, liefern diese APIs entweder zu viele oder zu wenig Informationen. Um diese Herausforderung zu lösen, versuchte Facebook als Nächstes, einen Weg zu finden, um die Bereitstellung von Informationen zu vereinfachen und den Gesamtverkehr zu reduzieren, der zur Erfüllung ihrer Szenarien erforderlich war.

Dies brachte GraphQL hervor. Die Technologie wurde ursprünglich vollständig vom iOS-Mobile-Team von Facebook genutzt und dann auf die übrigen mobilen Schnittstellen übertragen. Bald nutzte die überwiegende Mehrheit aller mobilen Interaktionen ihre GraphQL-APIs. Im Jahr 2015 kündigte Facebook die Implementierung an, die Welt erkannte die Vorteile des Einsatzes der Technologie und es folgte eine rasche Einführung.

Wie teste ich 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 detailliert, da wir neue wiederverwendbare Bausteine ​​für unsere Anwendungen erstellen möchten. Dies führt jedoch nicht direkt zu unseren User Stories oder zu den Aktionen, die wir vom Front-End aus ausführen möchten. Mit GraphQL können Sie die Interaktionen mit Ihren Backend-Daten vereinfachen, indem Sie eine Schnittstelle verwenden, deren Schemata das Systemverhalten beschreiben, damit Sie effiziente Daten von Ihren APIs abrufen können.

Jede Zuordnung des GraphQL-Schemas zu Funktionen. Diese Funktionen rufen dann gemäß Ihrer Geschäftslogik das Backend für Ihre REST-APIs, Datenbanken und alle anderen Ressourcen auf, die zum Sammeln der angeforderten Daten erforderlich sind.

Die Funktionen setzen dann die erforderlichen Daten zu einer Antwort zusammen, die dieselbe Form wie die Anforderung beibehält, wodurch sehr einfach zu verstehen ist, welche Daten welchen Elementen in der Anforderung 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.

GraphQL vs. traditionelle REST-APIs

Es gibt viele Vorteile, die GraphQL gegenüber herkömmlichen REST-API-Schnittstellen bieten kann. Wie bei den meisten Technologieimplementierungen gibt es keine Silberkugel oder einen Technologie-Stack, der besser ist als ein anderer. Einer der Gründe, warum GraphQL an Bedeutung gewinnt, ist seine Flexibilität beim Abrufen von Informationen.

Wenn Sie eine herkömmliche REST-API verwenden, ist der Aufruf, den Sie zum Abrufen Ihrer Informationen ausführen möchten, normalerweise nicht der einzige Aufruf, den Sie an das System senden. Wenn ich beispielsweise meinen Kontostand abrufen möchte, muss ich zuerst meine Kundennummer abrufen und diese Kundennummer dann zum Abrufen meiner Kontonummern verwenden. Sobald ich meine Kontonummern habe, kann ich den Kontostand für dieses Konto abfragen:

  1. Login = Kunden-ID
  2. CustomerId = Konto-ID
  3. AccountID = Saldo

An REST-APIs ist nichts auszusetzen. Dies sind einfach sie, die es uns ermöglichen, diskrete Aktionen zu entwickeln, die auf viele verschiedene Arten genutzt werden können. In diesem speziellen Fall musste ich jedoch Anrufe mit einer Folge von drei miteinander verketteten APIs tätigen, um die gewünschten Informationen abzurufen. Wenn wir über das Datenvolumen nachdenken, das in dieser Interaktion für jeden dieser API-Aufrufe ausgetauscht wurde, mussten wir außerdem die richtige Anforderung senden und eine vollständige Antwort erhalten, die vom Schema definiert wird. In unserem Fall musste ich mich wirklich nur mit den drei Werten Kunden-ID, Konto-ID und Kontostand befassen.

Mal sehen, wie diese Transaktion in der GraphQL-Welt stattfinden würde:

Abfrage {
Kunde (Name: ”Chris Colosimo”) {
    accountId {
        Hält
  }
 }
}

Wenn Sie ein erfahrener GraphQL-Benutzer sind, nehmen Sie diese Anfrage bitte mit einem Körnchen Salz entgegen. Ich verwende es, um zu veranschaulichen, dass das, was traditionell mit drei API-Aufrufen erreicht wird, mit einem mit GraphQL erreicht werden kann. Das Beste daran ist, dass Ihre vorhandene Funktionalität nicht erneut implementiert werden muss.

Es gibt viele zusätzliche Vor- und Nachteile zwischen REST und GraphQLEs ist jedoch 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. Egal, ob Sie API-Tests, GraphQL-Tests oder Lasttests durchführen. GraphQL sollte immer berücksichtigt werden, wenn Sie Ihre Front-End-Ressourcen erweitern möchten.

Theoretisch: Sie sollten GraphQL verwenden, wenn Sie eine einfache und effiziente Schnittstelle für Verbraucher erstellen möchten, die Ihre APIs nutzen möchten. Darüber hinaus möchten Sie möglicherweise GraphQL nutzen, wenn Sie den gesamten zwischen Ihrem Frontend und dem Backend ausgetauschten Datenverkehr reduzieren möchten, wie dies Facebook für den mobilen Datenverkehr getan hat.

Automatisiertes Testen von GraphQL-Endpunkten

GraphQL ist eine sehr leistungsfähige Technologie, mit der Ihre API-Konsumenten effizienter auf ihre Informationen zugreifen können. Um jedoch sicherzustellen, dass die Erfahrung wie erwartet funktioniert, müssen Sie Ihre GraphQL-APIs validieren. Hier kommt die Testautomatisierung ins Spiel.

Es gibt viele Automatisierungstools, wenn Sie entscheiden, wie Sie Ihre GraphQL-APIs testen. Ich werde Ihnen ein Beispiel mit Parasoft SOAtest geben, einer weit verbreiteten API-Testlö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 und hat seit einiger Zeit GraphQL-Unterstützung.

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

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

Betrachten Sie das folgende einfache Beispiel für eine GraphQL-Abfrage:

Abfrage {
   Benutzer {
      Vorname
      Nachname
      }
   }

Eine erwartete Rendite wäre ungefähr so:

{
   "Daten" : {
      "Benutzer": [
         {
            "Vorname": "John",
            "Nachname": "Doe"
         },
         {
            "Vorname": "Alicia",
            "Nachname": "Smith"
         }
      ]
   }
}

Dieselbe Abfrage kann in Parasoft SOAtest als REST-Client erstellt werden:

Screenshot der Erstellung einer Abfrage in Parasoft SOAtest als REST-Client.

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

Screenshot von Parasoft SOAtest Traffic Viewer.

Die zurückgegebenen Werte werden erwartet. Natürlich brauchen wir eine automatisierte Methode, um diese Ergebnisse zu überprüfen, und der SOAtest JSON-Assertor ist hier nützlich.

Überprüfen von GraphQL-Antworten

SOAtest überprüft JSON-Antworten anhand von Zusicherungen, die mit dem JSON-Assertor-Tool konfiguriert wurden. Hier ist eine Beispielprüfung, um festzustellen, ob der zurückgegebene Vorname eine Zeichenfolge "Luis" ist (von der wir wissen, dass sie kein gültiger Wert ist.)

Screenshot mit SOAtest zur Überprüfung von JSON-Antworten mithilfe von Zusicherungen.

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

Bildschirmaufnahme der Registerkarte "Qualitätsaufgaben" mit dem Testfehler.

Wie Sie sehen, ist es einfach, GraphQL-Endpunkte in SOAtest mit bereits vorhandenen Funktionen zu testen.

Was ist mit der Authentifizierung? Dies wird bereits von SOAtest erledigt und die vorhandenen Clientauthentifizierungstools funktionieren auch mit GraphQL-Endpunkten:

Screenshot von HTTP-Optionen.

Warum Parasoft SOAtest für GraphQL-Tests?

Die Vorteile von SOAtest für REST-, SOAP- und andere API-Tests bleiben für GraphQL gleich. Parasoft SOAtest wurde so konzipiert, dass es in eine vorhandene Testinfrastruktur passt. Es beschleunigt Tests, die eine agile Entwicklung ermöglichen, indem es Testern hilft, intelligenter zu arbeiten. Skriptlose Tests erleichtern die Zusammenarbeit zwischen Entwicklungs-, Test-, Leistungs- und Sicherheitsteams.

Parasoft SOAtest macht Tests einfach zu erstellen, einfach zu verwalten und zu orchestrieren sowie einfach auszuführen, zu schreiben und zu analysieren. Über GraphQL hinaus erleichtert die Unterstützung von SOAtest für mehr als 120 Nachrichtenformate / -protokolle sowie die Testgenerierung mithilfe von KI und maschinellem Lernen das Testen von APIs.

Möchten Sie GraphQL-Tests in Aktion sehen?

Schauen Sie sich dieses Video an, in dem wir genau das tun:

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

Chris Colosimo

Als Produktmanager bei Parasoft strategisiert Chris die Produktentwicklung der Funktionstestlösungen von Parasoft. Seine Expertise in der SDLC-Beschleunigung durch Automatisierung hat ihn zu wichtigen Unternehmensbereitstellungen wie Capital One und CareFirst geführt.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.