Webinaire en vedette : Dévoilement de Parasoft C/C++test CT pour l'excellence en matière de tests continus et de conformité | Voir le séminaire

De zéro à héros : un guide de test GraphQL pour les développeurs

Portrait de Grigori Trofimov, architecte de solutions senior chez Parasoft
8 mai 2023
8 min lire

La réalisation de tests GraphQL simplifiés peut être possible si vous utilisez l'automatisation des tests. Lisez la suite pour découvrir comment Parasoft SOAtest simplifie la création, la gestion et l'orchestration des tests GraphQL.

Tester les points de terminaison GraphQL est aussi nécessaire que tout autre test de point de terminaison et les tests automatisés sont là pour donner un coup de main. Explorons comment tester les points de terminaison GraphQL avec l'automatisation des tests !

Qu'est-ce que GraphQL?

GraphQL est un langage de requête pour les API qui a été développé par Facebook à partir de 2012 pour résoudre un problème spécifique - avec l'essor des smartphones et des navigateurs Web mobiles, l'utilisation des appels d'API RESTful était lente et inefficace, en particulier sur les réseaux mobiles. Plusieurs appels d'API vers plusieurs points de terminaison prenaient du temps, renvoyant souvent soit plus d'informations que nécessaire, soit pas assez. Les grandes quantités de données renvoyées, combinées à plusieurs appels d'API, ont entraîné une mauvaise expérience utilisateur.

Lorsqu'elle a été implémentée dans l'application Facebook pour iOS en 2015, le monde de la technologie a vu les avantages de la nouvelle technologie, ce qui a entraîné une adoption rapide par de nombreuses entreprises de premier plan. En 2015, GraphQL était open source et en 2019, la Fondation GraphQL a été créée pour développer davantage les implémentations de spécification et de référence. Bien que conçu à l'origine avec l'informatique mobile à l'esprit, la mise en œuvre s'est étendue à l'informatique de bureau et de serveur. L'adoption de GraphQL s'est étendue pour inclure des entreprises et des organisations telles que GitHub, Pinterest, Intuit, Coursera et Shopify.

GraphQL et API REST traditionnelles

GraphQL peut offrir de nombreux avantages par rapport aux interfaces API REST traditionnelles. Bien que chaque implémentation technologique ait des compromis, GraphQL offre plus de flexibilité dans la récupération des informations. Une seule requête GraphQL bien écrite peut renvoyer des informations qui nécessiteraient plusieurs appels d'API RESTful avec des requêtes HTTP. Les chercheurs et les développeurs ont découvert que les appels GraphQL renvoient des ensembles de données qui sont plus de 90 % plus petits que l'utilisation d'API RESTful pour acquérir les mêmes données.

Lorsque vous utilisez une API RESTful pour récupérer des données, vous devez souvent effectuer plusieurs appels d'API pour obtenir toutes les informations que vous recherchez. Par exemple, si vous vous connectez à votre banque, vous devez d'abord obtenir votre numéro de client. Une fois que vous avez votre numéro de client, vous pouvez obtenir votre numéro de compte. De là, vous pouvez obtenir le solde de votre compte :

Image montrant le code lors de l'utilisation d'une API RESTful pour récupérer les données du solde du compte.

Il n'y a rien de mal avec les API REST, mais plusieurs appels d'API sont souvent lents, lourds en données et inefficaces. Dans l'exemple ci-dessus, afin d'obtenir le solde de votre compte bancaire, vous deviez créer une séquence de trois appels d'API enchaînés, chacun étant une requête appropriée et une réponse complète définie par le schéma. Une requête GraphQL est plus légère et plus spécifique, ne traitant que les trois valeurs de l'ID client, de l'ID de compte et du solde :

Image du code simplifié GraphQL pour les données client : ID client, ID de compte et solde.

L'exemple ci-dessus peut sembler trivial, mais il montre comment une requête qui serait traditionnellement accomplie avec trois appels d'API peut être accomplie avec un seul en utilisant une requête GraphQL. La meilleure partie est qu'il ne nécessite pas de réimplémentation de vos fonctionnalités existantes.

Il existe de nombreux avantages et inconvénients supplémentaires entre REST et GraphQL, mais il est important de noter que les API GraphQL et REST ne s'excluent pas mutuellement et que l'adoption de l'une n'exclut pas l'autre. En fait, les deux fonctionnent assez harmonieusement ensemble.

Quand devriez-vous utiliser GraphQL ?

Lorsque vous décidez d'utiliser les API REST ou GraphQL, tenez compte de la complexité de vos données et de la flexibilité dont vous avez besoin dans vos requêtes et mutations. Si vos données sont relativement simples et que votre API nécessite une interface bien définie et basée sur les ressources, les API REST peuvent être la solution.

D'autre part, si vous avez des données complexes qui nécessitent requêtes flexibles et les mutations et que vous souhaitez minimiser la sur-extraction et la sous-extraction, alors GraphQL peut être un meilleur ajustement.

Cela nécessite une conception soignée pour créer des API et des requêtes GraphQL avec le schéma et l'organisation des types. Les API REST peuvent être plus faciles à concevoir et à interroger car vous pouvez séparer les demandes de données individuelles, mais leur exécution peut également prendre plus de temps. De manière générale, les API REST sont meilleures pour les requêtes très complexes, tandis que les requêtes GraphQL peuvent offrir plus d'optimisation et un fonctionnement plus rapide.

De plus, si les données en temps réel et plusieurs versions d'API sont importantes pour votre application, GraphQL peut offrir ces avantages, tandis que les API REST peuvent nécessiter plus d'efforts pour être mises en œuvre. En fin de compte, le choix entre les API REST et GraphQL dépend des exigences spécifiques de votre projet et des compromis que vous êtes prêt à faire.

Utilisez GraphQL lorsque vous souhaitez créer une interface simple et efficace pour les consommateurs qui souhaitent tirer parti de vos API. Vous pouvez également utiliser GraphQL pour réduire le trafic total échangé entre votre frontend et le backend comme Facebook l'a fait pour le trafic mobile. Si vous souhaitez récupérer toutes les données pertinentes dans une seule requête, GraphQL peut très bien le faire.

Pourquoi devriez-vous écrire des tests pour GraphQL

Comme avec autres tests fonctionnels, il est important de tester les API GraphQL pour s'assurer que la logique métier du logiciel fonctionne correctement. Vous devez vérifier que les requêtes, les schémas et toutes les mutations se comportent et répondent comme prévu. L'écriture et l'exécution de tests aident les développeurs et l'assurance qualité à détecter les erreurs plus tôt, avant qu'elles ne passent en production. Cela garantit également que vous disposez d'une couverture de test suffisante pour l'API et l'application

Comment tester les implémentations de l'API GraphQL

GraphQL est une couche d'abstraction qui existe entre les systèmes frontaux et les API backend, ce qui rend essentiel les tests. Les requêtes GraphQL vous permettent d'accéder à plusieurs ressources dans le backend et d'agréger ces données en une seule réponse significative.

Capture d'écran de GraphQL montrant des échantillons de code de données de description, demandez ce que vous voulez, obtenez des résultats prévisibles.

Les API backend sont généralement granulaires car nous souhaitons créer de nouveaux blocs de construction réutilisables pour nos applications. Cependant, cela ne se traduit pas directement dans nos user stories ou dans les actions que nous voulons pouvoir accomplir depuis le frontend. GraphQL est un moyen de simplifier les interactions avec vos données backend en utilisant une interface avec des schémas qui décrivent le comportement du système afin que vous puissiez obtenir des données efficaces à partir de vos API.

Chacun des schémas GraphQL correspond à des fonctions. Ces fonctions effectueront ensuite des appels ultérieurs au backend sur vos API, bases de données et toute autre ressource nécessaire pour collecter les données demandées.

Les fonctions assembleront ensuite les données nécessaires dans une réponse qui conservera la même forme que la demande, ce qui permettra de comprendre très facilement quelles données sont associées à quels éléments de la demande.

Demandez ce dont vous avez besoin,
obtenir exactement cela.

-graphql.org

De plus, GraphQL peut être configuré pour appeler plusieurs services de backend au fur et à mesure qu'il assemble sa réponse à la requête. Cela réduit le temps total dont un consommateur a besoin pour naviguer dans les documents d'API pour comprendre et lire les informations disponibles à partir d'un appel.

Types de tests

Tests de requête

Un test de requête est une demande de données provenant d'une ou plusieurs tables de base de données. Une requête peut être soit une demande de résultats de données, soit une action sur les données, soit les deux.

Essais de mutation

Un test de mutation est une forme de test qui modifie des composants spécifiques du code d'une application pour voir si un outil de test peut détecter les changements. Les tests de mutation sont généralement utilisés pour effectuer des tests unitaires afin de voir si un outil logiciel peut détecter un code qui n'est pas correctement testé ou qui présente des défauts cachés que d'autres méthodes de test ne détectent pas.

Tests de charge

Un test de charge est un type de test de performances qui soumet votre application ou votre site Web à des contraintes qui ressemblent à des conditions réelles. Sans test de charge, votre logiciel pourrait échouer quand cela compte vraiment. Les outils de test de charge examinent les performances de votre application lors de charges normales et élevées.

Tests de sécurité

Un test de sécurité est une forme de test qui découvre les vulnérabilités, les risques et les menaces dans une application logicielle et empêche les attaques de pirates. Un test de sécurité identifie les éventuelles faiblesses du système qui pourraient mettre votre application, vos informations, vos utilisateurs ou votre entreprise en danger.

Tests de schéma

Les tests de schéma, également appelés tests de mappage, sont une forme de test logiciel qui valide les objets d'une application frontale avec les objets de base de données correspondants. Les tests de schéma sont utilisés pour rechercher des objets non mappés dans une base de données, tels que des tables, des vues ou des colonnes.

Test automatisé des points de terminaison GraphQL

GraphQL est une technologie puissante qui permet à vos consommateurs d'API d'accéder à leurs informations de manière plus efficace. Pour vous assurer que l'expérience fonctionne comme vous le souhaitez, vous devez valider vos API GraphQL. C'est ici que automatisation des tests entre en jeu.

Il existe de nombreux outils d'automatisation disponibles pour tester vos API GraphQL. Dans ce cas, j'utilise Parasoft SOAtest, un logiciel largement utilisé Test d'API solution qui simplifie le défi souvent décourageant de valider vos API critiques sur plusieurs technologies. Il prend en charge une large gamme de formats de message et protocoles, y compris GraphQL.

Les points de terminaison GraphQL acceptent les requêtes sous forme de chaînes et renvoient des réponses JSON avec les résultats de la requête. Cela correspond bien à SOAtest, car les requêtes peuvent être effectuées par les clients REST pour envoyer les requêtes et la validation peut être effectuée par les outils de vérification JSON existants.

Considérez l'exemple simple de requête GraphQL suivant.

Image d'un exemple de code simple pour une requête GraphQL.

Un retour attendu serait quelque chose comme:

Image de code montrant un retour attendu d'une requête GraphQL.

Cette même requête peut être créée dans Parasoft SOAtest via GraphQL Client en mode Littéral ou Formulaire.

Capture d'écran de Parasoft SOAtest montrant le client GraphQL.

Dans SOAtest, les requêtes GraphQL sont envoyées sous la forme d'une chaîne nommée query. Les réponses sont renvoyées au format JSON, que SOAtest est facilement capable d'interpréter et de représenter dans son visualiseur de trafic.

Capture d'écran de Parasoft SOAtest montrant une requête GraphQL.

Les valeurs retournées sont attendues. Nous avons besoin d'un moyen automatisé pour vérifier ces résultats. L'asserteur SOAtest JSON est utile ici.

Vérification des réponses GraphQL

SOAtest vérifie les réponses JSON à l'aide d'assertions configurées avec son outil d'assertion JSON. Voici un exemple de vérification pour voir si le prénom renvoyé est une chaîne "Luis" dont nous savons qu'elle n'est pas une valeur valide.

Capture d'écran de Parasoft SOAtest montrant l'asserteur JSON.

En exécutant à nouveau le test, le test échoue.

Capture d'écran de Parasoft SOAtest montrant un test ayant échoué dans une suite de tests du client GraphQL.

Comme vous pouvez le voir, le test de GraphQL est simple dans SOAtest en utilisant des fonctionnalités déjà existantes.

Capture d'écran de Parasoft SOAtest montrant les résultats des tests de GraphQL comparant le contenu attendu et réel.

Qu'en est-il de l'authentification ? Ceci est géré par SOAtest et les outils d'authentification client existants fonctionneront également avec les points de terminaison GraphQL.

Capture d'écran de Parasoft SOAtest montrant un outil d'authentification client GraphQL.

Pourquoi Parasoft SOAtest pour les tests GraphQL?

Les avantages que SOAtest apporte aux tests REST, SOAP et autres API restent les mêmes pour GraphQL. Conçu pour s'intégrer à l'infrastructure de test existante, Parasoft SOAtest accélère les tests qui permettent le développement Agile en aidant les testeurs à travailler plus intelligemment avec des tests sans script qui facilitent la collaboration entre les équipes de développement, de test, de performance et de sécurité.

Parasoft SOAtest facilite la création, la gestion, l'orchestration, l'exécution, l'écriture et l'analyse des tests. Au-delà de GraphQL, la prise en charge par SOAtest de plus de 120 formats et protocoles de messages, ainsi que la génération de tests assistée par l'IA et l'apprentissage automatique, facilitent les tests d'API.

Voir les tests GraphQL en action

Jetez un œil à cette vidéo, où nous vous montrons comment utiliser SOAtest pour envoyer des requêtes GraphQL aux API qui ont implémenté GraphQL. Si vous trouvez cela utile, partagez-le avec d'autres!

Découvrez la principale solution de test fonctionnel d'API et d'interface utilisateur optimisée par l'IA et le ML en action.