GraphQL est un langage de requête et de manipulation open-source pour les API développé par Facebook. Les leaders du secteur et les grandes entreprises telles que Facebook, Airbnb et Github adoptent GraphQL.1 Les développeurs utilisent GraphQL en conjonction avec les API REST ou parfois même comme une alternative directe.
Tout comme les tests d’API REST, les tests GraphQL sont nécessaires aux utilisateurs pour garantir la stabilité des API GraphQL. Cependant, contrairement aux tests des API REST, les tests GraphQL peuvent s’avérer difficiles car peu d’outils prennent en charge GraphQL. Cet article vise à combler le manque d’informations en donnant des informations sur les types et les composants des tests GraphQL.
Qu’est-ce que le test GraphQL ?
Figure 1 : Représentation de GraphQL
L’objectif principal des tests GraphQL est de s’assurer que les schémas, les requêtes et les mutations créés pour une API fonctionnent comme prévu. Comme GraphQL est un service situé entre les systèmes frontaux et les API dorsales, le test GraphQL est crucial pour maintenir la stabilité des services offerts par les API.
GraphQL possède un seul point de terminaison (voir la figure 1 ci-dessus), ce qui en fait une connexion directe entre la source de données et le client. Pour cette raison, GraphQL est essentiel à des fins de test.
Sponsorisé par
Les tests d’API sont une pratique essentielle pour garantir la stabilité d’une API. PULSE est un outil d’automatisation des tests d’API créé par Testifi. Il peut réduire la durée et le coût du cycle de 50% et améliorer la documentation. Des entreprises bien connues comme BMW et Amazon utilisent les services de Testifi.
Les 3 principaux avantages des tests GraphQL
Les tests GraphQL offrent les avantages suivants :
- Meilleure vue d’ensemble des applications : Les tests GraphQL permettront au testeur de mieux comprendre les objets et les structures de données renvoyés par les requêtes.
- Élimination des bogues imprévus : GraphQL est flexible, et les tests aident les utilisateurs à s’assurer que le nombre d’erreurs est minimal.
- Stabilité : Les tests GraphQL améliorent la qualité et la stabilité générales des API GraphQL en vérifiant et en garantissant les fonctions des requêtes, des résolveurs, des schémas et des mutations.
Types de tests GraphQL
Il existe de multiples méthodes pour tester GraphQL :
- Vérification statique des types : Il est avantageux d’utiliser un langage avec vérification statique des types, comme JavaScript ou ses extensions. Le nombre d’erreurs entre les schémas et les résolveurs sera plus faible grâce aux vérifications multiples des fonctions par la méthode de vérification statique des types2.
- Tests unitaires : Ils sont utilisés pour tester les schémas ou les résolveurs.
- Tests d’intégration : Ils sont utilisés pour vérifier comment les résolveurs et les schémas fonctionnent ensemble.
- Tests de bout en bout : Ils sont utilisés pour vérifier l’ensemble du cycle de vie des API GraphQL, des schémas aux résolveurs en passant par les requêtes, et la manière dont elles sont livrées aux clients. Les tests E2E (End-to-end) sont davantage liés au côté client.
Nous pouvons mettre en œuvre le schéma du Trophée pour nous faire une idée de la préférence des méthodes (voir la figure 2).
Figure 2 : Le trophée de test
Source : Medium3
Nous énumérons ci-dessous le raisonnement qui sous-tend le trophée de test (voir la figure 2) :
- Le type statique vérifie le code et montre s’il y a quelque chose qui ne va pas.
- Les tests unitaires sont relativement faciles à réaliser car ils testent de petites unités de code et peuvent s’exécuter rapidement.
- Les tests d’intégration sont plus lents car ils testent plusieurs couches de code. Le testeur peut utiliser un serveur fantaisie et vérifier les flux du test.
- Les tests de bout en bout sont beaucoup plus lents et difficiles à réaliser car ils impliquent plusieurs produits tels que des serveurs, des clients et des bases de données. Ces tests sont utilisés pour vérifier une routine.
Composants à tester dans GraphQL
Voici les composants suivants sur lesquels vous devriez effectuer des tests :
- Schéma : Les schémas peuvent être testés en utilisant des vérifications de type statique et des schémas fictifs et des requêtes de test.
- Requête : Une approche automatisée peut être utilisée pour tester les requêtes à l’aide de bibliothèques telles que « request » et « supertest ». GraphiQL4 est également un moyen facile de tester les requêtes si les serveurs GraphQL sont construits en JavaScript. EasyGraphQL tester peut également être mis en œuvre par l’utilisateur pour tester différentes requêtes.
- Mutations : Les mutations peuvent être testées en utilisant la fonction du testeur d’EasyGraphQL ou la requête de mutation de GraphiQL dans son client. Cela permettra de s’assurer que la base de données fonctionne correctement.
- Résolveurs : La bibliothèque de testeurs d’EasyGraphQL peut être utilisée pour tester les résolveurs. Les résolveurs sont des fonctions Javascript, ils peuvent donc être testés comme un autre code Javascript.
EasyGraphQL5 est l’un des outils les plus utilisés pour les tests GraphQL. Vous pouvez l’exécuter sur chaque implémentation JavaScript de GraphQL. Vous pouvez également simuler les résultats des requêtes et les tester.
Test du schéma
Nous pouvons utiliser des vérifications de type statique, un schéma fictif et des requêtes de test pour tester le schéma. Les bibliothèques graphql-schema-linter6 et eslint-plugin-graphql7 peuvent être utilisées pour effectuer des tests de schéma.
Est-lint-plugin-graphql est un linter pour étendre les règles Eslint, et graphql-schema-linter est un outil pour valider la définition du schéma. En plus des vérifications statiques des types, mocker le schéma en utilisant un mock-server via graphql-tools8(un ensemble de paquets npm) tout en faisant attention aux combinaisons possibles sera bénéfique pour les tests de schéma.
Test des requêtes et des mutations
Alors que nous pouvons utiliser une approche automatisée en utilisant les bibliothèques « request » et « supertest » pour le test des requêtes, nous pouvons faire des simulations de requêtes et de mutations via easygraphql-tester.9 Nous pouvons également faire des assertions de test directement via easygraphql-tester au lieu de faire des simulations. Ci-dessous, vous pouvez voir l’exemple d’assertion de test direct.
Source : Conférences NDC10
Test des résolveurs
Les résolveurs sont de pures fonctions, et ils sont plus faciles à tester. Nous n’avons pas besoin de packages pour tester les résolveurs ; il s’agit simplement de fonctions javascript ou de n’importe quel langage sur lequel le serveur GraphQL est basé. Les résolveurs collectent des informations à partir des schémas, il est donc nécessaire de les tester dès le début pour éviter des erreurs coûteuses. Voici un exemple de test de résolveurs :